该类实现一个缓冲的输入流。通过设置这样的输入流, 一个应用
不必为每个读取的字节调用基本系统就能将字节读入字节流中。数据以分块形式读入缓冲区;顺序读取能直接存取缓冲区中的数据。
java.lang.Object
|
+----java.io.InputStream
|
+----java.io.FilterInputStream
|
+----java.io.BufferedInputStream
reset
方法失败前,调用 mark
方法之后所允许的最大读取数。mark
方法时 pos
域的值。mark
和reset
方法。mark
方法上次调用的位置。n
字节数据。
protected byte buf[]
protected int count
protected int pos
buf
数组中读取的下一个字符的下标。
protected int markpos
protected int marklimit
public BufferedInputStream(InputStream in)
public BufferedInputStream(InputStream in,
int size)
public synchronized int read() throws IOException
0
到 255
范围内的一个 int
数。如果已读到流尾,无可读的字节时,返回 -1
。禁用该方法,除非输入数据可用,检测出数据流终止或抛出异常。
若缓冲区不为空,则 BufferedInputStream
的读
方法返回其缓冲区的下一个数据字节。否则, 若基本流未返回流终止指示符,则用基本输入流重新填充缓冲流并返回下一个字符。
public synchronized int read(byte b[],
int off,
int len) throws IOException
若该流的缓冲区不为空,则将字节从中复制到参数数组,否则,
用基本输入流重新填充该缓冲区并 (除非数据流返回流尾指示符) 用新填充的缓冲区字符来填充数组参数。
作为一种优化, 若缓冲区为空、标志不有效且 len
至少与缓冲区一样大, 则该方法将直接从基本流中读取数据到给定数组中。因此冗余的 BufferedInputStream
不能复制不必要的数据。
-1
。
public synchronized long skip(long n) throws IOException
n
字节数据。skip
BufferedInputStream
的 skip
方法比较其缓冲区中可用字节数,k, 其中 k =count - pos
,
以 n
递增。若 n
≤ k,
则 pos
域以 n
递增。否则,递增 pos
域来获得值count
,并通过调用基本输入流上的skip
方法并提供参数n -
k 来跳过剩余字节。
public synchronized int available() throws IOException
BufferedInputStream
的 available
方法返回缓冲区中剩余的字节总数 (count - pos
) 和调用基本输入流的可用的
方法的结果。
public synchronized void mark(int readlimit)
reset
方法重新将流定位于最后的标记位置,从而后续读取能读取相同字节。readlimit
参数提供输入流在标记位置变为非法前所允许读取多个字节数。
public synchronized void reset() throws IOException
mark
方法上次调用时的位置。
若流仍未标记或标记非法,则抛出一个 IOException 。读取前需要浏览一下流内容时,才使用流标记。调用通用的语法分析器将很容易做到这一点。若流是语法分析器所处理的类型,则继续前进。若流不是该类型,失败时语法分析器将抛出异常。若在 readlimit 字节内抛出异常,
则语法分析器允许外部编码重置该流并使用另一语法分析器。
public boolean markSupported()
mark
和reset
方法。BufferedInputStream
的 markSupported
true
。
boolean
,它指示该流类型是否支持mark
和 reset
方法。