java.lang.Object
java.io.InputStream
java.io.FilterInputStream
java.io.BufferedInputStream
- 所有已实现的接口:
-
Closeable,AutoCloseable
BufferedInputStream 添加了对另一个输入流的功能,即缓冲输入并支持 mark 和 reset 方法。创建 BufferedInputStream 时,会创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区会根据需要从包含的输入流中以多个字节的方式进行填充。 mark 操作会记住输入流中的一个点,而 reset 操作会导致自最近的 mark 操作以来读取的所有字节在从包含的输入流中获取新字节之前重新读取。
- 自版本:
- 1.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected byte[]存储数据的内部缓冲区数组。protected int缓冲区中最后一个有效字节的索引加一。protected int在调用mark方法后,允许的最大预读量,在后续调用reset方法之前。protected int上次调用mark方法时的pos字段的值。protected int缓冲区中的当前位置。Fields declared in class java.io.FilterInputStream
in -
Constructor Summary
ConstructorsConstructorDescription创建一个BufferedInputStream并保存其参数,即输入流in,以备后用。BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的BufferedInputStream,并保存其参数,即输入流in,以备后用。 -
Method Summary
Modifier and TypeMethodDescriptionint返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。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方法的一般约定。Methods declared in class java.io.FilterInputStream
readMethods declared in class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Field Details
-
buf
protected volatile byte[] buf存储数据的内部缓冲区数组。必要时,它可能会被不同大小的另一个数组替换。 -
count
protected int count缓冲区中最后一个有效字节的索引加一。此值始终在范围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可以丢弃标记。- 另请参阅:
-
-
Constructor Details
-
BufferedInputStream
创建一个BufferedInputStream并保存其参数,即输入流in,以备后用。创建一个内部缓冲区数组并将其存储在buf中。- 参数:
-
in- 底层输入流。
-
BufferedInputStream
创建具有指定缓冲区大小的BufferedInputStream,并保存其参数,即输入流in,以备后用。创建一个长度为size的内部缓冲区数组并将其存储在buf中。- 参数:
-
in- 底层输入流。 -
size- 缓冲区大小。 - 抛出:
-
IllegalArgumentException- 如果size <= 0。
-
-
Method Details
-
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错误。 - 另请参见:
-