服务器之家

服务器之家 > 正文

Java中FilterInputStream和FilterOutputStream的用法详解

时间:2020-05-18 12:33     来源/作者:kuiwu-wang

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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();
  }
}

相关文章

热门资讯

歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
返回顶部