首页 > 编程 > Java > 正文

Java中FilterInputStream和FilterOutputStream的用法详解

2019-11-26 14:10:23
字体:
来源:转载
供稿:网友

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();  }}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表