JavaIO BufferedInputStream BufferedOutputStream实例讲解

时间:2018-09-12
本文章向大家介绍JavaIO BufferedInputStream BufferedOutputStream实例讲解,需要的朋友可以参考一下

功能简介

BufferedInputStream 和 BufferedOutputStream一样,他们都是过滤流

装饰器模式下具体的装饰类

用来装饰InputStream以及OutputStream下的其他的具体的实现类

比如FileInputStream

BufferedInputStream 和 BufferedOutputStream

都是在内部借助于字节数组,来实现缓存的

BufferedInputStream

BufferedInputStream

内部使用字节数组对输入流进行缓存

protected volatile byte buf[];

内部的字节数组

可能动态增长,动态增长是借助于创建新数组然后复制,重新指向

DEFAULT_BUFFER_SIZE

默认大小8K 8192

private static int MAX_BUFFER_SIZE = Integer.MAX_VALUE - 8;

缓冲区最大允许大小

protected int count;

有效字节的个数

protected int pos;

buf 数组中读取的下一个字符的下标索引

protected int markpos = -1;

最后一次调用 mark 方法时 pos 字段的值

protected int marklimit;

调用 mark 方法后,在后续调用 reset 方法失败之前所允许的最大提前读取量

就是最多支持的个数

buf[]; 用于实际存储字节数组的值

DEFAULT_BUFFER_SIZE 表示默认缓冲区的大小

MAX_BUFFER_SIZE 表示 最大支持的缓冲区大小

这三个字段用于存储缓冲

pos 用于记录读取位置

markpos / marklimit mark功能使用

构造方法

说了很多遍的装饰器模式, 是你还有你

他的使用,必然离不开 InputStream,而且,它内部还会维护一个 InputStream

看下构造方法,如果不指定大小,那么将会使用默认大小

如果指定了大小,只要合法,将会创建字节数组

而且,会调用父类的构造方法,父类FilterInputStream中 in是protected的