当前位置 类层次 (JDK) 所有类 (JDK) 所有域和方法 (JDK)

类 java.io.BufferedInputStream

java.lang.Object
   |
   +----java.io.InputStream
           |
           +----java.io.FilterInputStream
                   |
                   +----java.io.BufferedInputStream

public class BufferedInputStream
extends FilterInputStream

该类实现一个缓冲的输入流。通过设置这样的输入流, 一个应用 不必为每个读取的字节调用基本系统就能将字节读入字节流中。数据以分块形式读入缓冲区;顺序读取能直接存取缓冲区中的数据。


变量索引

buf
数据存储的缓冲区。
count
比缓冲区中最后一个有效字节的下标大一的下标。
marklimit
顺序调用 reset 方法失败前,调用 mark 方法之后所允许的最大读取数。
markpos
上次调用 mark方法时 pos 域的值。
pos
缓冲区中当前位置。

构造子索引

BufferedInputStream(InputStream)
创建一个新的缓冲输入流以便从指定输入流中以缺省 512 字节缓冲区尺寸来读取数据。
BufferedInputStream(InputStream, int)
创建一个新的缓冲输入流以便从指定输入流中以指定缓冲区尺寸读取数据。

方法索引

available()
返回能从该未分块输入流中读取的字节数。
mark(int)
在该输入流中标记当前位置。
markSupported()
测试该输入流是否支持markreset方法。
read()
从缓冲输入流中读取下一个数据字节。
read(byte[], int, int)
将字符读入一个数组的某部分中。
reset()
将该输入流重新定位到该输入流上mark方法上次调用的位置。
skip(long)
跳过并删除输入流的 n 字节数据。

变量

buf
 protected byte buf[]
数据存储的缓冲区。

count
 protected int count
比缓冲区中最后一个有效字节的下标大一的下标。

pos
 protected int pos
缓冲区中当前位置。这是从 buf 数组中读取的下一个字符的下标。

参见:
buf
markpos
 protected int markpos
上次调用mark方法时的 pos 域值。若无当前标记,则该域值为 -1

参见:
mark, pos
marklimit
 protected int marklimit
顺序调用reset失败前,调用mark方法之后允许的最大读取数。

参见:
mark, reset

构造子

BufferedInputStream
 public BufferedInputStream(InputStream in)
创建一个新的缓冲输入流以便从指定输入流中以缺省 512 字节来读取数据。

参数:
in - 基本的输入缓存。
BufferedInputStream
 public BufferedInputStream(InputStream in,
             int size)
创建一个新的缓冲输入流以便从指定输入流中以指定缓冲区尺寸读取数据。

参数:
in - 基本的输入缓存。
size - 缓冲区尺寸。

方法

read
 public synchronized int read() throws IOException
从该缓冲输入流中读取下一个数据字节。返回的字节值是 0255 范围内的一个 int 数。如果已读到流尾,无可读的字节时,返回 -1。禁用该方法,除非输入数据可用,检测出数据流终止或抛出异常。

若缓冲区不为空,则 BufferedInputStream方法返回其缓冲区的下一个数据字节。否则, 若基本流未返回流终止指示符,则用基本输入流重新填充缓冲流并返回下一个字符。

返回值:
数据的下一个字节,若已读到流尾则为 -1
抛出: IOException
如果发生某个 I/O 错误。
覆盖:
FilterInputStream 中的 read
参见:
in
read
 public synchronized int read(byte b[],
                   int off,
                 int len) throws IOException
将字符读入一个数组的某部分中。阻塞该方法直到某些输入数据可用、发生 I/O 错误或到达流尾为止。

若该流的缓冲区不为空,则将字节从中复制到参数数组,否则, 用基本输入流重新填充该缓冲区并 (除非数据流返回流尾指示符) 用新填充的缓冲区字符来填充数组参数。

作为一种优化, 若缓冲区为空、标志不有效且 len 至少与缓冲区一样大, 则该方法将直接从基本流中读取数据到给定数组中。因此冗余的 BufferedInputStream 不能复制不必要的数据。

参数:
b - 目标缓冲区。
off - 开始存储字节的偏移量。
len - 读取字节的最大数。
返回值:
读取字节数, 若已达到流尾,则为 -1
抛出: IOException
如果发生某个 I/O 错误。
覆盖:
FilterInputStream 中的 read
skip
 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 来跳过剩余字节。

参数:
n - 跳过的字节数。
返回值:
实际跳过的字节数。
抛出: IOException
如果发生某个 I/O 错误。
覆盖:
FilterInputStream 中的 skip
available
 public synchronized int available() throws IOException
返回能从该未分块输入流中读取的字节数。

BufferedInputStreamavailable 方法返回缓冲区中剩余的字节总数 (count - pos) 和调用基本输入流的可用的方法的结果。

返回值:
从当前输入流中可无阻塞读取的字节数。
抛出: IOException
如果发生某个 I/O 错误。
覆盖:
FilterInputStream 中的 available
参见:
in
mark
 public synchronized void mark(int readlimit)
在该输入流中标记当前位置。后续调用 reset 方法重新将流定位于最后的标记位置,从而后续读取能读取相同字节。

readlimit 参数提供输入流在标记位置变为非法前所允许读取多个字节数。

参数:
readlimit - 标记位置变为无效前能读取的最大字节数。
覆盖:
FilterInputStream 中的 mark
参见:
reset
reset
 public synchronized void reset() throws IOException
将该输入流重新定位到该输入流的mark方法上次调用时的位置。

若流仍未标记或标记非法,则抛出一个 IOException 。读取前需要浏览一下流内容时,才使用流标记。调用通用的语法分析器将很容易做到这一点。若流是语法分析器所处理的类型,则继续前进。若流不是该类型,失败时语法分析器将抛出异常。若在 readlimit 字节内抛出异常, 则语法分析器允许外部编码重置该流并使用另一语法分析器。

抛出: IOException
若该流仍未标记或标记已是非法的。
覆盖:
FilterInputStream 中的 reset
参见:
mark
markSupported
 public boolean markSupported()
测试该输入流是否支持markreset方法。BufferedInputStreammarkSupported 方法返回 true

返回值:
boolean,它指示该流类型是否支持mark reset 方法。
覆盖:
FilterInputStream 中的 markSupported
参见:
mark, reset

当前位置 类层次 (JDK) 所有类 (JDK) 所有域和方法 (JDK)