JavaTM 2 Platform
Standard Ed. 5.0

java.io
类 BufferedInputStream

java.lang.Object
  继承者 java.io.InputStream
      继承者 java.io.FilterInputStream
          继承者 java.io.BufferedInputStream
所有已实现的接口:
Closeable

public class BufferedInputStream
extends FilterInputStream

作为另一种输入流,BufferedInputStream 为添加了功能,即缓冲输入和支持 markreset 方法的能力。创建 BufferedInputStream 时即创建了一个内部缓冲区数组。读取或跳过流中的各字节时,必要时可根据所包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作导致在从所包含的输入流中获取新的字节前,再次读取自最后一次 mark 操作以来所读取的所有字节。

从以下版本开始:
JDK1.0

字段摘要
protected  byte[] buf
          存储数据的内部缓冲区数组。
protected  int count
          比缓冲区中最后一个有效字节的索引大一的索引。
protected  int marklimit
          调用 mark 方法后,在后续调用 reset 方法失败前所允许的最大提前读取量。
protected  int markpos
          最后一次调用 mark 方法时 pos 字段的值。
protected  int pos
          缓冲区中的当前位置。
 
从类 java.io.FilterInputStream 继承的字段
in
 
构造方法摘要
BufferedInputStream(InputStream in)
          创建 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
BufferedInputStream(InputStream in, int size)
          创建具有指定缓冲区大小的 BufferedInputStream,并保存其参数,即输入流 in,以便将来使用。
 
方法摘要
 int available()
          返回可以不受阻塞地从此输入流读取的字节数。
 void close()
          关闭此输入流并释放与该流关联的所有系统资源。
 void mark(int readlimit)
          参见 InputStreammark 方法的常规协定。
 boolean markSupported()
          测试此输入流是否支持 markreset 方法。
 int read()
          参见 InputStreamread 方法的常规协定。
 int read(byte[] b, int off, int len)
          在此字节输入流中从给定的偏移量开始将各字节读取到指定的 byte 数组中。
 void reset()
          参见 InputStreamreset 方法的常规协定。
 long skip(long n)
          参见 InputStreamskip 方法的常规协定。
 
从类 java.io.FilterInputStream 继承的方法
read
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

buf

protected volatile byte[] buf
存储数据的内部缓冲区数组。必要时,可用另一个不同大小的数组替换它。


count

protected int count
比缓冲区中最后一个有效字节的索引大一的索引。此值始终处于 0buf.length 范围内;元素 buf[0]buf[count-1] 包含缓冲的输入数据,这些数据从基础输入流中获得。


pos

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

此值始终处于 0count 范围内。如果此值小于 count,则 buf[pos] 是用作输入的下一个字节;如果此值等于 count,要进行下一次 readskip 操作,需要从所包含的输入流中读取更多的字节。

另请参见:
buf

markpos

protected int markpos
最后一次调用 mark 方法时 pos 字段的值。

此值始终处于 -1pos 范围内。如果在输入流中没有已标记的位置,则此字段为 -1。如果在输入流中有已标记的位置,则 buf[markpos]reset 操作后用作输入的第一个字节。如果 markpos 不是 -1,则从位置 buf[markpos]buf[pos-1] 之间的所有字节都必须保留在缓冲区数组中(尽管对 countposmarkpos 的值进行合适的调整后,这些字节可能移到缓冲区数组中的其他位置);除非 posmarkpos 之间的差超过 marklimit,否则不能将其丢弃。

另请参见:
mark(int), pos

marklimit

protected int marklimit
调用 mark 方法后,在后续调用 reset 方法失败前所允许的最大提前读取量。只要 posmarkpos 之间的差超过 marklimit,就可以通过将 markpos 设置为 -1 来删除该标记。

另请参见:
mark(int), reset()
构造方法详细信息

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
参见 InputStreamread 方法的常规协定。

覆盖:
FilterInputStream 中的 read
返回:
下一个数据字节,如果到达流末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
FilterInputStream.in

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
在此字节输入流中从给定的偏移量开始将各字节读取到指定的 byte 数组中。

此方法实现了相应 InputStream 类的 read 方法的常规协定。另一个便捷之处在于,它会尝试尽可能多的读取字节,方法是重复地调用基础流的 read 方法。这种迭代的 read 会一直继续下去,直到满足下列某个条件:

如果在基础流上第一次调用 read 返回 -1(指示文件末尾),则此方法返回 -1。否则此方法返回实际读取的字节数。

鼓励(但不是必须)此类的各个子类以相同的方式尝试读取尽可能多的字节。

覆盖:
FilterInputStream 中的 read
参数:
b - 目标缓冲区。
off - 开始存储字节处的偏移量。
len - 要读取的最大字节数。
返回:
读取的字节数,如果已到达流末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
FilterInputStream.in

skip

public long skip(long n)
          throws IOException
参见 InputStreamskip 方法的常规协定。

覆盖:
FilterInputStream 中的 skip
参数:
n - 要跳过的字节数。
返回:
跳过的实际字节数。
抛出:
IOException - 如果发生 I/O 错误。

available

public int available()
              throws IOException
返回可以不受阻塞地从此输入流读取的字节数。

BufferedInputStreamavailable 方法返回缓冲中尚未读取的字节数(count - pos)和调用基础输入流的 available 方法所得结果的和。

覆盖:
FilterInputStream 中的 available
返回:
可以不受阻塞地从此输入流读取的字节数。
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
FilterInputStream.in

mark

public void mark(int readlimit)
参见 InputStreammark 方法的常规协定。

覆盖:
FilterInputStream 中的 mark
参数:
readlimit - 在标记位置变得无效前可以读取字节的最大限制。
另请参见:
reset()

reset

public void reset()
           throws IOException
参见 InputStreamreset 方法的常规协定。

如果 markpos-1(尚未设置标记,或者标记已失效),则抛出 IOException。否则,将 pos 设置为与 markpos 相等。

覆盖:
FilterInputStream 中的 reset
抛出:
IOException - 如果尚未标记此流,或者标记已失效。
另请参见:
mark(int)

markSupported

public boolean markSupported()
测试此输入流是否支持 markreset 方法。BufferedInputStreammarkSupported 方法返回 true

覆盖:
FilterInputStream 中的 markSupported
返回:
一个 boolean 值,指示此流类型是否支持 markreset 方法。
另请参见:
InputStream.mark(int), InputStream.reset()

close

public void close()
           throws IOException
关闭此输入流并释放与该流关联的所有系统资源。

指定者:
接口 Closeable 中的 close
覆盖:
FilterInputStream 中的 close
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
FilterInputStream.in

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策