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
Modifier 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
ConstructorDescription创建一个BufferedInputStream
并保存其参数,即输入流in
,以备后用。BufferedInputStream
(InputStream in, int size) 创建具有指定缓冲区大小的BufferedInputStream
,并保存其参数,即输入流in
,以备后用。 -
Method Summary
Modifier and TypeMethodDescriptionint
返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。void
close()
关闭此输入流并释放与流相关的任何系统资源。void
mark
(int readlimit) 查看InputStream
的mark
方法的一般约定。boolean
测试此输入流是否支持mark
和reset
方法。int
read()
查看InputStream
的read
方法的一般约定。int
read
(byte[] b, int off, int len) 从此字节输入流中读取字节到指定的字节数组中,从给定偏移量开始。void
reset()
查看InputStream
的reset
方法的一般约定。long
skip
(long n) 查看InputStream
的skip
方法的一般约定。Methods declared in class java.io.FilterInputStream
read
Methods 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错误。 - 另请参见:
-