JavaIO<5>--FilterInputStream,FilterOutputStream

1.FilterInputStream

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


2.FilterOutputStream

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



你可能感兴趣的:(JavaIO<5>--FilterInputStream,FilterOutputStream)