Java中FilterInputStream和FilterOutputStream的用法详解
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多线程编程中互斥锁ReentrantLock类的用法
-
Java中FilterInputStream和FilterOutputStream的用法详解
-
java8中新的Date和Time详解
-
详解Java中Vector和ArrayList的区别
-
详解Java中ByteArray字节数组的输入输出流的用法
-
详解Java中synchronized关键字的死锁和内存占用问题
-
Java中synchronized关键字修饰方法同步的用法详解
-
java集合——Java中的equals和hashCode方法详解
-
Java程序开发中abstract 和 interface的区别详解
-
Java中volatile关键字的作用与用法详解