Java中FilterInputStream和FilterOutputStream的用法详解

作者:kuiwu-wang 时间:2023-10-02 06:47:03 

FilterInputStream
FilterInputStream 的作用是用来“封装其它的输入流,并为它们提供额外的功能”。它的常用的子类有BufferedInputStream和DataInputStream。
BufferedInputStream的作用就是为“输入流提供缓冲功能,以及mark()和reset()功能”。
DataInputStream 是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。应用程序可以使用DataOutputStream(数据输出流)写入由DataInputStream(数据输入流)读取的数据。
FilterInputStream 源码(基于jdk1.7.40):


package java.io;
public class FilterInputStream extends InputStream {
 protected volatile InputStream in;

protected FilterInputStream(InputStream in) {
   this.in = in;
 }

public int read() throws IOException {
   return in.read();
 }

public int read(byte b[]) throws IOException {
   return read(b, 0, b.length);
 }

public int read(byte b[], int off, int len) throws IOException {
   return in.read(b, off, len);
 }

public long skip(long n) throws IOException {
   return in.skip(n);
 }

public int available() throws IOException {
   return in.available();
 }

public void close() throws IOException {
   in.close();
 }

public synchronized void mark(int readlimit) {
   in.mark(readlimit);
 }

public synchronized void reset() throws IOException {
   in.reset();
 }

public boolean markSupported() {
   return in.markSupported();
 }
}

FilterOutputStream 
FilterOutputStream 的作用是用来“封装其它的输出流,并为它们提供额外的功能”。它主要包括BufferedOutputStream, DataOutputStream和PrintStream。
(01) BufferedOutputStream的作用就是为“输出流提供缓冲功能”。
(02) DataOutputStream 是用来装饰其它输出流,将DataOutputStream和DataInputStream输入流配合使用,“允许应用程序以与机器无关方式从底层输入流中读写基本 Java 数据类型”。
(03) PrintStream 是用来装饰其它输出流。它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
FilterOutputStream 源码(基于jdk1.7.40):


package java.io;

public class FilterOutputStream extends OutputStream {
 protected OutputStream out;

public FilterOutputStream(OutputStream out) {
   this.out = out;
 }

public void write(int b) throws IOException {
   out.write(b);
 }

public void write(byte b[]) throws IOException {
   write(b, 0, b.length);
 }

public void write(byte b[], int off, int len) throws IOException {
   if ((off | len | (b.length - (len + off)) | (off + len)) < 0)
     throw new IndexOutOfBoundsException();

for (int i = 0 ; i < len ; i++) {
     write(b[off + i]);
   }
 }

public void flush() throws IOException {
   out.flush();
 }

public void close() throws IOException {
   try {
    flush();
   } catch (IOException ignored) {
   }
   out.close();
 }
}

标签:Java,FilterInputStream,FilterOutputStream
0
投稿

猜你喜欢

  • 使用Springboot封装一个自适配的数据单位转换工具类

    2022-06-07 07:12:14
  • Java多线程:生产者与消费者案例

    2021-06-30 05:47:08
  • Spring注解Autowired的底层实现原理详解

    2022-10-19 11:49:44
  • Java将字符串转化为数组的两种方法

    2021-07-07 20:33:49
  • 最优雅地整合 Spring & Spring MVC & MyBatis 搭建 Java 企业级应用(附源码)

    2023-09-26 18:27:57
  • 深入同步访问共享的可变数据分析

    2023-05-08 00:16:49
  • Java实现删除排序数组中重复元素的方法小结【三种方法比较】

    2023-09-28 15:21:48
  • C#调用VB进行简繁转换的方法

    2023-02-25 23:19:43
  • java基础-数组扩容详解

    2022-05-24 00:34:58
  • springboot @Valid注解对嵌套类型的校验功能

    2023-07-01 13:02:18
  • 微服务通过Feign调用进行密码安全认证操作

    2023-07-30 02:43:38
  • java使用IO流对数组排序实例讲解

    2023-09-04 02:24:19
  • java动态线程池的简单实现思路

    2023-10-18 15:53:46
  • java 生成xml并转为字符串的方法

    2023-01-07 08:27:30
  • Java集合教程之Collection实例详解

    2022-12-01 23:45:13
  • Android实现层叠卡片式banner

    2023-03-04 03:57:08
  • C#实现简易多人聊天室

    2023-02-06 06:09:47
  • JAVA多线程知识汇总

    2021-08-03 09:04:47
  • c#调用vc写的ocx控件示例

    2021-09-26 19:34:00
  • 细谈java同步之JMM(Java Memory Model)

    2023-11-23 13:09:33
  • asp之家 软件编程 m.aspxhome.com