public class BufferedInputStream extends FilterInputStream
BufferedInputStream
为另一个输入流添加了功能,即缓冲输入和支持mark
和reset
方法的功能。
当创建BufferedInputStream
时,将创建一个内部缓冲区数组。
当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次有多个字节。
mark
操作会记住输入流中的一点,并且reset
操作会导致从最近的mark
操作之后读取的所有字节在从包含的输入流中取出新的字节之前重新读取。
Modifier and Type | Field and Description |
---|---|
protected byte[] |
buf
存储数据的内部缓冲区数组。
|
protected int |
count
索引一大于缓冲区中最后一个有效字节的索引。
|
protected int |
marklimit
mark 方法调用后,最大超前允许,后续调用
reset 方法失败。
|
protected int |
markpos
pos 字段在最后一个
mark 方法被调用时的值。
|
protected int |
pos
缓冲区中的当前位置。
|
in
Constructor and Description |
---|
BufferedInputStream(InputStream in)
创建一个
BufferedInputStream 并保存其参数,输入流
in ,供以后使用。
|
BufferedInputStream(InputStream in, int size)
创建
BufferedInputStream 具有指定缓冲区大小,并保存其参数,输入流
in ,供以后使用。
|
Modifier and Type | Method and Description |
---|---|
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 的一般合同。
|
read
protected volatile byte[] buf
protected int count
0
到buf.length
;
元素buf[0]
至buf[count-1]
包含从底层输入流获得的缓冲输入数据。
protected int pos
buf
数组读取的下一个字符的索引。
此值始终在0
到count
。 如果小于count
,那么buf[pos]
是作为输入提供的下一个字节; 如果等于count
,那么接下来的read
或skip
操作将需要从包含的输入流读取更多的字节。
buf
protected int markpos
pos
字段在最后一个mark
方法被调用时的值。
此值始终在-1
到pos
。 如果输入流中没有标记位置,则此字段为-1
。 如果在输入流中有一个标记的位置,那么buf[markpos]
是reset
操作后作为输入提供的第一个字节。 如果markpos
不是-1
,然后从位置的所有字节buf[markpos]
通过buf[pos-1]
必须保留在缓冲器阵列中(尽管它们可以被移动到缓冲器阵列中的另一个处,与适当的调整的值count
, pos
和markpos
); 除非pos
和markpos
之间的markpos
超过marklimit
。
public BufferedInputStream(InputStream in)
BufferedInputStream
并保存其参数,输入流in
供以后使用。
内部缓冲区数组创建并存储在buf
。
in
- 底层输入流。
public BufferedInputStream(InputStream in, int size)
BufferedInputStream
缓冲区大小的BufferedInputStream,并保存其参数,输入流in
供以后使用。
长度为size
的内部缓冲区阵列被创建并存储在buf
。
in
- 底层输入流。
size
- 缓冲区大小。
IllegalArgumentException
- 如果
size <= 0
。
public int read() throws IOException
read
法
InputStream
的一般合同。
read
在
FilterInputStream
-1
。
IOException
- 如果此输入流已通过调用其
close()
方法已关闭,或发生I / O错误。
FilterInputStream.in
public int read(byte[] b, int off, int len) throws IOException
该方法执行
类对应的InputStream
方法的一般合同。 作为一个额外的方便,它尝试通过重复调用基础流的read
read
方法来读取尽可能多的字节。 此迭代read
继续,直至read
条件之一为止:
read
方法返回-1
,表示文件结尾,或 available
方法返回零,表示进一步的输入请求将阻塞。 read
返回-1
以指示文件结束,则此方法返回-1
。
否则,此方法返回实际读取的字节数。
鼓励这个类的子类,但不是必需的,尝试以相同的方式读取尽可能多的字节。
read
在
FilterInputStream
b
- 目的缓冲区。
off
- 开始存储字节的偏移量。
len
- 要读取的最大字节数。
-1
如果流已到达)。
IOException
- 如果此输入流已通过调用其
close()
方法关闭,或发生I / O错误。
FilterInputStream.in
public long skip(long n) throws IOException
skip
的方法
InputStream
。
skip
在
FilterInputStream
n
- 要跳过的字节数。
IOException
- 如果流不支持查询,或者如果此输入流已通过调用其
close()
方法关闭,或发生I / O错误。
public int available() throws IOException
该方法返回缓冲区( count - pos
)中要读取的剩余字节数和调用in
.available()的结果。
available
在
FilterInputStream
IOException
- 如果此输入流已通过调用其
close()
方法关闭,或发生I / O错误。
public void mark(int readlimit)
mark
的方法
InputStream
。
mark
在类别
FilterInputStream
readlimit
- 标记位置无效之前可以读取的最大字节数限制。
reset()
public void reset() throws IOException
reset
的方法InputStream
。
如果markpos
是-1
(没有设置标记或标记已被无效),则抛出IOException
。 否则, pos
设置等于markpos
。
reset
在类别
FilterInputStream
IOException
- 如果该流未被标记,或者如果该标记已被无效,或通过调用其
close()
方法已关闭流或发生I / O错误。
mark(int)
public boolean markSupported()
mark
和reset
方法。
markSupported
方法BufferedInputStream
返回true
。
markSupported
在
FilterInputStream
boolean
指示这种流类型是否支持
mark
和
reset
方法。
InputStream.mark(int)
,
InputStream.reset()
public void close() throws IOException
close
在界面
Closeable
close
在界面
AutoCloseable
close
在
FilterInputStream
IOException
- 如果发生I / O错误。
FilterInputStream.in