java.lang.Object
java.io.InputStream
java.io.FilterInputStream
java.io.BufferedInputStream
- 所有已实现的接口:
Closeable,AutoCloseable
BufferedInputStream 向另一个输入流添加功能,即缓冲输入和支持 mark 和 reset 方法的能力。创建 BufferedInputStream 时,会创建一个内部缓冲区数组。当流中的字节被读取或跳过时,内部缓冲区会根据需要从包含的输入流中重新填充,一次填充多个字节。 mark 操作会记住输入流中的一个点,而 reset 操作会导致在从包含的输入流中获取新字节之前重新读取自最近的 mark 操作以来读取的所有字节。
- 自从:
- 1.0
-
字段摘要
字段修饰符和类型Field描述protected byte[]存储数据的内部缓冲区数组。protected int索引比缓冲区中最后一个有效字节的索引大 1。protected int在对reset方法的后续调用失败之前调用mark方法后允许的最大预读。protected int最后一次调用mark方法时pos字段的值。protected int缓冲区中的当前位置。在类 java.io.FilterInputStream 中声明的字段
in -
构造方法总结
构造方法构造方法描述创建一个BufferedInputStream并保存其参数,即输入流in,供以后使用。BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的BufferedInputStream,并保存其参数,即输入流in,供以后使用。 -
方法总结
修饰符和类型方法描述int返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次为此输入流的方法调用阻塞。voidclose()关闭此输入流并释放与该流关联的所有系统资源。voidmark(int readlimit) 参见InputStream的mark方法的总契约。boolean测试此输入流是否支持mark和reset方法。intread()参见InputStream的read方法的总契约。intread(byte[] b, int off, int len) 从此字节输入流中读取字节到指定的字节数组,从给定的偏移量开始。voidreset()参见InputStream的reset方法的总契约。longskip(long n) 参见InputStream的skip方法的总契约。在类 java.io.FilterInputStream 中声明的方法
read在类 java.io.InputStream 中声明的方法
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
字段详细信息
-
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在对reset方法的后续调用失败之前调用mark方法后允许的最大预读。每当pos和markpos之间的差异超过marklimit时,可以通过将markpos设置为-1来删除标记。- 参见:
-
-
构造方法详细信息
-
BufferedInputStream
创建一个BufferedInputStream并保存其参数,即输入流in,供以后使用。创建一个内部缓冲区数组并将其存储在buf中。- 参数:
in- 底层输入流。
-
BufferedInputStream
创建具有指定缓冲区大小的BufferedInputStream,并保存其参数,即输入流in,供以后使用。创建一个长度为size的内部缓冲区数组并将其存储在buf中。- 参数:
in- 底层输入流。size- 缓冲区大小。- 抛出:
IllegalArgumentException- 如果size <= 0。
-
-
方法详情
-
read
参见InputStream的read方法的总契约。- 重写:
read在类FilterInputStream中- 返回:
-
下一个数据字节,如果到达流的末尾则为
-1。 - 抛出:
IOException- 如果此输入流已通过调用其close()方法关闭,或者发生 I/O 错误。- 参见:
-
read
从此字节输入流中读取字节到指定的字节数组,从给定的偏移量开始。该方法实现了
InputStream类对应的read方法的通用契约。作为额外的便利,它会尝试通过重复调用底层流的read方法来读取尽可能多的字节。这种迭代read一直持续到以下条件之一变为真:- 已读取指定数量的字节,
- 底层流的
read方法返回-1,表示文件结束,或者 - 底层流的
available方法返回零,表示进一步的输入请求将被阻止。
read返回-1以指示文件结束,则此方法返回-1。否则此方法返回实际读取的字节数。鼓励但不要求此类的子类尝试以相同的方式读取尽可能多的字节。
- 重写:
read在类FilterInputStream中- 参数:
b- 目标缓冲区。off- 开始存储字节的偏移量。len- 要读取的最大字节数。- 返回:
-
读取的字节数,如果已到达流的末尾,则为
-1。 - 抛出:
IOException- 如果此输入流已通过调用其close()方法关闭,或者发生 I/O 错误。IndexOutOfBoundsException- 如果off为负,len为负,或者len大于b.length - off- 参见:
-
skip
参见InputStream的skip方法的总契约。- 重写:
skip在类FilterInputStream中- 参数:
n- 要跳过的字节数。- 返回:
- 实际跳过的字节数。
- 抛出:
IOException- 如果此输入流已通过调用其close()方法关闭,in.skip(n)将抛出 IOException,或发生 I/O 错误。- 参见:
-
available
返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次为此输入流的方法调用阻塞。下一次调用可能是同一个线程或另一个线程。单次读取或跳过这么多字节不会阻塞,但可能会读取或跳过更少的字节。此方法返回缓冲区中剩余要读取的字节数 (
count - pos) 和调用in.available()的结果之和。- 重写:
available在类FilterInputStream中- 返回:
- 可以从该输入流中无阻塞地读取(或跳过)的字节数的估计值。
- 抛出:
IOException- 如果此输入流已通过调用其close()方法关闭,或者发生 I/O 错误。
-
mark
public void mark(int readlimit) 参见InputStream的mark方法的总契约。- 重写:
mark在类FilterInputStream中- 参数:
readlimit- 在标记位置变为无效之前可以读取的最大字节数限制。- 参见:
-
reset
参见InputStream的reset方法的总契约。如果
markpos是-1(未设置标记或标记已失效),则抛出IOException。否则,pos设置为等于markpos。- 重写:
reset在类FilterInputStream中- 抛出:
IOException- 如果此流未被标记,或者标记已失效,或者流已通过调用其close()方法关闭,或者发生 I/O 错误。- 参见:
-
markSupported
public boolean markSupported()测试此输入流是否支持mark和reset方法。BufferedInputStream的markSupported方法返回true。- 重写:
markSupported在类FilterInputStream中- 返回:
boolean指示此流类型是否支持mark和reset方法。- 参见:
-
close
关闭此输入流并释放与该流关联的所有系统资源。流关闭后,进一步的 read()、available()、reset() 或 skip() 调用将抛出 IOException。关闭之前关闭的流没有任何效果。- 指定者:
close在接口AutoCloseable中- 指定者:
close在接口Closeable中- 重写:
close在类FilterInputStream中- 抛出:
IOException- 如果发生 I/O 错误。- 参见:
-