- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- java.io.BufferedInputStream
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
public class BufferedInputStream extends FilterInputStream
ABufferedInputStream
为另一个输入流添加了功能,即缓冲输入并支持mark
和reset
方法的功能。 创建BufferedInputStream
将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。mark
操作会记住输入流中的一个点,并且reset
操作会导致从最近的mark
操作读取的所有字节在从包含的输入流中取出新字节之前重新读取。- 从以下版本开始:
- 1.0
-
-
Field Summary
Fields Modifier and Type Field 描述 protected byte[]
buf
存储数据的内部缓冲区数组。protected int
count
索引一大于缓冲区中最后一个有效字节的索引。protected int
marklimit
读取的最大的一个电话后,允许提前mark
后续调用方法之前reset
方法失败。protected int
markpos
在最后一个mark
方法的时候,pos
字段的值被调用。protected int
pos
缓冲区中的当前位置。-
Fields inherited from class java.io.FilterInputStream
in
-
-
构造方法摘要
构造方法 Constructor 描述 BufferedInputStream(InputStream in)
创建一个BufferedInputStream
并保存其参数,输入流in
供以后使用。BufferedInputStream(InputStream in, int size)
创建具有指定缓冲区大小的BufferedInputStream
,并保存其参数,输入流in
供以后使用。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 int
available()
从下一次调用此输入流的方法返回可从该输入流读取(或跳过)的字节数,而不会阻塞。void
close()
关闭此输入流并释放与流相关联的任何系统资源。void
mark(int readlimit)
见mark
法InputStream
的一般合同。boolean
markSupported()
测试此输入流是否支持mark
和reset
方法。int
read()
见read
法InputStream
的一般合同。int
read(byte[] b, int off, int len)
从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。void
reset()
见reset
法InputStream
的一般合同。long
skip(long n)
见skip
法InputStream
的一般合同。-
Methods inherited from class java.io.FilterInputStream
read
-
Methods inherited from class java.io.InputStream
readAllBytes, readNBytes, transferTo
-
-
-
-
字段详细信息
-
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
操作将需要从包含的输入流读取更多的字节。- 另请参见:
-
buf
-
markpos
protected int markpos
在调用最后一个mark
方法时的pos
字段的值。该值始终在
-1
到pos
。 如果输入流中没有标记位置,则此字段为-1
。 如果输入流中有一个标记的位置,那么buf[markpos]
是reset
操作后作为输入提供的第一个字节。 如果markpos
不是-1
,然后从位置的所有字节buf[markpos]
通过buf[pos-1]
必须保留在缓冲器阵列中(尽管它们可以被移动到缓冲器阵列中的另一个处,与适当的调整的值count
,pos
,和markpos
); 除非pos
与markpos
之间的markpos
超过marklimit
否则不得丢弃。
-
-
构造方法详细信息
-
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
见read
法InputStream
的一般合同。- 重写:
-
read
在FilterInputStream
- 结果
-
数据的下一个字节,如果达到流的末尾,
-1
。 - 异常
-
IOException
- 如果此输入流已通过调用其close()
方法已关闭,或发生I / O错误。 - 另请参见:
-
FilterInputStream.in
-
read
public int read(byte[] b, int off, int len) throws IOException
从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。该方法执行
类相应的InputStream
方法的一般合同。 作为一个额外的方便,它尝试通过重复调用基础流的read
read
方法来读取尽可能多的字节。 继续执行read
直到满足下列条件之一为止:- 指定的字节数已被读取,
- 底层流的
read
方法返回-1
,表示文件末尾,或 - 底层流的
available
方法返回零,表示进一步的输入请求将阻塞。
read
返回-1
以指示文件结束,则此方法返回-1
。 否则,此方法返回实际读取的字节数。鼓励这个类的子类,但不是必需的,尝试以相同的方式读取尽可能多的字节。
- 重写:
-
read
在FilterInputStream
- 参数
-
b
- 目的缓冲区。 -
off
- 开始存储字节的偏移量。 -
len
- 要读取的最大字节数。 - 结果
-
读取的字节数,如果已达到流的末尾,
-1
。 - 异常
-
IOException
- 如果此输入流已通过调用其close()
方法已关闭,或发生I / O错误。 - 另请参见:
-
FilterInputStream.in
-
skip
public long skip(long n) throws IOException
见skip
法InputStream
的一般合同。- 重写:
-
skip
在FilterInputStream
- 参数
-
n
- 要跳过的字节数。 - 结果
- 实际跳过的字节数。
- 异常
-
IOException
- 如果此输入流已通过调用其close()
方法关闭,则in.skip(n)
将抛出IOException或发生I / O错误。
-
available
public int available() throws IOException
从下一次调用此输入流的方法返回可从该输入流读取(或跳过)的字节数,而不会阻塞。 下一个调用可能是同一个线程或另一个线程。 这个多个字节的单个读取或跳过将不会被阻塞,但可以读取或跳过较少的字节。该方法返回缓冲区中要读取的剩余字节数(
count - pos
)和调用in
.available()的结果。- 重写:
-
available
在FilterInputStream
- 结果
- 可以从该输入流中读取(或跳过)不受阻塞的字节数的估计。
- 异常
-
IOException
- 如果此输入流已通过调用其close()
方法关闭,或发生I / O错误。
-
mark
public void mark(int readlimit)
见mark
法InputStream
的一般合同。- 重写:
-
mark
在FilterInputStream
- 参数
-
readlimit
- 标记位置无效之前可以读取的最大字节数。 - 另请参见:
-
reset()
-
reset
public void reset() throws IOException
见reset
法InputStream
的一般合同。如果
markpos
是-1
(没有设置标记或标记已经无效),则抛出一个IOException
。 否则,pos
设置为等于markpos
。- 重写:
-
reset
在FilterInputStream
- 异常
-
IOException
- 如果该流未被标记,或者如果该标记已被无效,或流已经通过调用其close()
方法而关闭,或发生I / O错误。 - 另请参见:
-
mark(int)
-
markSupported
public boolean markSupported()
测试此输入流是否支持mark
和reset
方法。 该markSupported
方法BufferedInputStream
回报true
。- 重写:
-
markSupported
在FilterInputStream
- 结果
-
一个
boolean
表示这个流类型是否支持mark
和reset
方法。 - 另请参见:
-
InputStream.mark(int)
,InputStream.reset()
-
close
public void close() throws IOException
关闭此输入流并释放与流相关联的任何系统资源。 一旦流已关闭,进一步的read(),available(),reset()或skip()调用将抛出IOException异常。 关闭以前关闭的流无效。- Specified by:
-
close
在接口AutoCloseable
- Specified by:
-
close
在接口Closeable
- 重写:
-
close
在FilterInputStream
- 异常
-
IOException
- 如果发生I / O错误。 - 另请参见:
-
FilterInputStream.in
-
-