java.io java
类 BufferedInputStream数组
java.lang.Object测试
┗java.io.InputStream线程
┗java.io.FilterInputStream继承
┗java.io.BufferedInputStream索引
全部已实现的接口: 接口
Closeableip
public class BufferedInputStream extends FilterInputStream资源
BufferedInputStream 为另外一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在建立 BufferedInputStream 时,会建立一个内部缓冲区数组。在读取或跳过流中的字节时,可根据须要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操做记录输入流中的某个点,reset 操做使得在从包含的输入流中获取新字节以前,再次读取自最后一次 mark 操做后读取的全部字节。get
字段摘要
protected byte[] buf
存储数据的内部缓冲区数组。
protected int count
比缓冲区中最后一个有效字节的索引大 1 的索引。
protected int marklimit
调用 mark 方法后,在后续调用 reset 方法失败以前所容许的最大提早读取量。
protected int markpos
最后一次调用 mark 方法时 pos 字段的值。
protected int pos
缓冲区中的当前位置。
从类 java.io.FilterInputStream 继承的字段
in
构造方法摘要
BufferedInputStream(InputStream in)
建立一个 BufferedInputStream 并保存其参数,即输入流 in,以便未来使用。
BufferedInputStream(InputStream in, int size)
建立具备指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便未来使用。
方法摘要
int available()
返回能够今后输入流读取(或跳过)、且不受此输入流接下来的方法调用阻塞的估计字节数。
void close()
关闭此输入流并释放与该流关联的全部系统资源。
void mark(int readlimit)
参见 InputStream 的 mark 方法的常规协定。
boolean markSupported()
测试此输入流是否支持 mark 和 reset 方法。
int read()
参见 InputStream 的 read 方法的常规协定。
int read(byte[] b, int off, int len)
今后字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。
void reset()
参见 InputStream 的 reset 方法的常规协定。
long skip(long n)
参见 InputStream 的 skip 方法的常规协定。
从类 java.io.FilterInputStream 继承的方法
read
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
字段详细信息
buf
protected volatile byte[] buf存储数据的内部缓冲区数组。必要时可用另外一个不一样大小的数组替换它。
count
protected int count比缓冲区中最后一个有效字节的索引大 1 的索引。此值始终处于 0 到 buf.length 的范围内;从 buf[0] 到 buf[count-1] 的元素包含从底层输入流中获取的缓冲输入数据。
pos
protected int pos缓冲区中的当前位置。这是将从 buf 数组中读取的下一个字符的索引。
此值始终处于 0 到 count 的范围内。若是此值小于 count,则 buf[pos] 将做为下一个输入字节;若是此值等于 count,则下一次 read 或 skip 操做须要从包含的输入流中读取更多的字节。
markpos
protected int markpos最后一次调用 mark 方法时 pos 字段的值。
此值始终处于 -1 到 pos 的范围内。若是输入流中没有被标记的位置,则此字段为 -1。若是输入流中有被标记的位置,则 buf[markpos] 将用做 reset 操做后的第一个输入字节。若是 markpos 不是 -1,则从位置 buf[markpos] 到 buf[pos-1] 之间的全部字节都必须保留在缓冲区数组中(尽管对 count、pos 和 markpos 的值进行适当调整后,这些字节可能移动到缓冲区数组中的其余位置);除非 pos 与 markpos 的差超过 marklimit,不然不能将其丢弃。
marklimit
protected int marklimit调用 mark 方法后,在后续调用 reset 方法失败以前所容许的最大提早读取量。只要 pos 与 markpos 之差超过 marklimit,就能够经过将 markpos 设置为 -1 来删除该标记。
构造方法详细信息
BufferedInputStream
public BufferedInputStream(InputStream in)
建立一个 BufferedInputStream 并保存其参数,即输入流 in,以便未来使用。建立一个内部缓冲区数组并将其存储在 buf 中。
参数:
in - 底层输入流。
BufferedInputStream
public BufferedInputStream(InputStream in, int size)
建立具备指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便未来使用。建立一个长度为 size 的内部缓冲区数组并将其存储在 buf 中。
参数:
in - 底层输入流。
size - 缓冲区大小。
抛出:
IllegalArgumentException - 若是 size <= 0
方法详细信息
read
public int read()throws IOException
参见 InputStream 的 read 方法的常规协定。
覆盖:
类 FilterInputStream 中的 read
返回:
下一个数据字节,若是到达流末尾,则返回 -1。
抛出:
IOException - 若是已经调用其 close() 方法关闭了此输入流,或者发生 I/O 错误。
read
public int read(byte[] b, int off, int len) throws IOException
今后字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。
此方法实现了 InputStream 类相应 read 方法的常规协定。另外一个便捷之处在于,它将经过重复地调用底层流的 read 方法,尝试读取尽量多的字节。这种迭代的 read 会一直继续下去,直到知足如下条件之一:
已经读取了指定的字节数,
底层流的 read 方法返回 -1,指示文件末尾(end-of-file),或者
底层流的 available 方法返回 0,指示将阻塞后续的输入请求。
若是第一次对底层流调用 read 返回 -1(指示文件末尾),则此方法返回 -1。不然此方法返回实际读取的字节数。
鼓励(但不是必须)此类的各个子类以相同的方式尝试读取尽量多的字节。
覆盖:
类 FilterInputStream 中的 read
参数:
b - 目标缓冲区。
off - 开始存储字节处的偏移量。
len - 要读取的最大字节数。
返回:
读取的字节数;若是已到达流末尾,则返回 -1。
抛出:
IOException - 若是已经调用其 close() 方法关闭了此输入流,或者发生 I/O 错误。
skip
public long skip(long n) throws IOException
参见 InputStream 的 skip 方法的常规协定。
覆盖:
类 FilterInputStream 中的 skip
参数:
n - 要跳过的字节数。
返回:
跳过的实际字节数。
抛出:
IOException - 若是流不支持查找操做;或者已经调用其 close() 方法关闭了此输入流;或者发生 I/O 错误。
available
public int available() throws IOException
返回能够今后输入流读取(或跳过)、且不受此输入流接下来的方法调用阻塞的估计字节数。接下来的调用多是同一个线程,也多是不一样的线程。一次读取或跳过这么多字节将不会受阻塞,但能够读取或跳过数量更少的字节。
此方法返回缓冲区中剩余的待读取字节数 (count - pos) 与调用 in.available() 的结果之和。
覆盖:
类 FilterInputStream 中的 available
返回:
能够不受阻塞地今后输入流读取(或跳过)的估计字节数。
抛出:
IOException - 若是已经调用其 close() 方法关闭了此输入流,或者发生 I/O 错误。
mark
public void mark(int readlimit)
参见 InputStream 的 mark 方法的常规协定。
覆盖:
类 FilterInputStream 中的 mark
参数:
readlimit - 在标记位置变为无效以前能够读取字节的最大限制。
reset
public void reset() throws IOException
参见 InputStream 的 reset 方法的常规协定。
若是 markpos 为 -1(还没有设置标记,或者标记已失效),则抛出 IOException。不然将 pos 设置为与 markpos 相等。
覆盖:
类 FilterInputStream 中的 reset
抛出:
IOException - 若是还没有标记此流;或者标记已失效;或者已经调用其 close() 方法关闭了此输入流;或者发生 I/O 错误。
markSupported
public boolean markSupported()
测试此输入流是否支持 mark 和 reset 方法。BufferedInputStream 的 markSupported 方法返回 true。
覆盖:
类 FilterInputStream 中的 markSupported
返回:
一个 boolean 值,指示此流类型是否支持 mark 和 reset 方法。
close
public void close() throws IOException
关闭此输入流并释放与该流关联的全部系统资源。关闭了该流以后,后续的 read()、available()、reset() 或 skip() 调用都将抛出 IOException。关闭以前已关闭的流不会产生任何效果。
指定者:
接口 Closeable 中的 close
覆盖:
类 FilterInputStream 中的 close
抛出:
IOException - 若是发生 I/O 错误。