- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- java.io.BufferedInputStream
-
- 实现的所有接口
-
Closeable
,AutoCloseable
public class BufferedInputStream extends FilterInputStream
BufferedInputStream
向另一个输入流添加功能 - 即缓冲输入并支持mark
和reset
方法的功能。 创建BufferedInputStream
将创建内部缓冲区阵列。 当读取或跳过来自流的字节时,内部缓冲区根据需要从包含的输入流中重新填充,一次多个字节。mark
操作会记住输入流中的一个点,并且reset
操作会导致在从包含的输入流中获取新字节之前重新读取自最近的mark
操作以来读取的所有字节。- 从以下版本开始:
- 1.0
-
-
构造方法摘要
构造方法 构造器 描述 BufferedInputStream(InputStream in)
创建一个BufferedInputStream
并保存其参数,即输入流in
,供以后使用。BufferedInputStream(InputStream in, int size)
创建具有指定缓冲区大小的BufferedInputStream
,并保存其参数(输入流in
)供以后使用。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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
。-
声明方法的类 java.io.FilterInputStream
read
-
声明方法的类 java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, 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
操作将需要从包含的输入流中读取更多字节。- 另请参见:
-
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
之间的差异超过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
- 结果
-
a
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
-
-