软件编程
位置:首页>> 软件编程>> java编程>> Java中FilterInputStream和FilterOutputStream的用法详解

Java中FilterInputStream和FilterOutputStream的用法详解

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

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com