JavaTM Platform
Standard Ed. 6

java.io
类 PushbackInputStream

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

public class PushbackInputStream
     
extends FilterInputStream

PushbackInputStream 为另一个输入流添加性能,即“推回 (push back)”或“取消读取 (unread)”一个字节的能力。在代码片段可以很方便地读取由特定字节值分隔的不定数量的数据字节时,这很有用;在读取终止字节后,代码片段可以“取消读取”该字节,这样,输入流上的下一个读取操作将会重新读取被推回的字节。例如,表示构成标识符字符的字节可能由表示操作符字符的字节终止;用于读取一个标识符的方法可以读取到遇到操作符为止,然后将该操作符推回以进行重读。

从以下版本开始:
JDK1.0

字段摘要
protected  byte[] buf
          推回缓冲区。
protected  int pos
          推回缓冲区中的位置,将读取该位置的下一个字节。
 
从类 java.io.FilterInputStream 继承的字段
in
 
构造方法摘要
PushbackInputStream(InputStream in)
          创建 PushbackInputStream 并保存其参数(即输入流 in),以供将来使用。
PushbackInputStream(InputStream in, int size)
          使用指定 size 的推回缓冲区创建 PushbackInputStream,并保存其参数(即输入流 in),以供将来使用。
 
方法摘要
 int available()
          返回可以不受下一次调用此输入流的方法阻塞地从此输入流读取(或跳过)的估计字节数。
 void close()
          关闭此输入流并释放与该流关联的所有系统资源。
 void mark(int readlimit)
          在此输入流中标记当前的位置。
 boolean markSupported()
          测试此输入流是否支持 markreset 方法,此输入流不支持这两个方法。
 int read()
          从此输入流中读取下一个数据字节。
 int read(byte[] b, int off, int len)
          从此输入流将最多 len 个数据字节读入 byte 数组。
 void reset()
          将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。
 long skip(long n)
          从此输入流中跳过并丢弃 n 个数据字节。
 void unread(byte[] b)
          推回一个 byte 数组:将其复制到推回缓冲区之前。
 void unread(byte[] b, int off, int len)
          推回 byte 数组的某一部分:将其复制到推回缓冲区之前。
 void unread(int b)
          推回一个字节:将其复制到推回缓冲区之前。
 
从类 java.io.FilterInputStream 继承的方法
read
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

buf

protected byte[] buf
推回缓冲区。

从以下版本开始:
JDK1.1

pos

protected int pos
推回缓冲区中的位置,将读取该位置的下一个字节。缓冲区为空时, pos 等于 buf.length;缓冲区已满时, pos 等于 0。

从以下版本开始:
JDK1.1
构造方法详细信息

PushbackInputStream

public PushbackInputStream(InputStream in,
                           int size)
使用指定 size 的推回缓冲区创建 PushbackInputStream,并保存其参数(即输入流 in),以供将来使用。最初,不存在推回字节(字段 pushBack 被初始化为 -1)。

参数:
in - 从中读取字节的输入流。
size - 推回缓冲区的大小。
抛出:
IllegalArgumentException - 如果 size <= 0
从以下版本开始:
JDK1.1

PushbackInputStream

public PushbackInputStream(InputStream in)
创建 PushbackInputStream 并保存其参数(即输入流 in),以供将来使用。最初,不存在推回字节(字段 pushBack 被初始化为 -1)。

参数:
in - 从中读取字节的输入流。
方法详细信息

read

public int read()
         throws IOException
从此输入流中读取下一个数据字节。以 int 形式返回 0255 范围内字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常之前,此方法一直阻塞。

此方法返回最近一次推回的字节(如果有),否则将调用其底层输入流的 read 方法,并返回该方法返回的任何值。

覆盖:
FilterInputStream 中的 read
返回:
下一个数据字节;如果已到达流末尾,则返回 -1
抛出:
IOException - 如果已调用其 close() 方法关闭此输入流,或者发生 I/O 错误。
另请参见:
InputStream.read()

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
从此输入流将最多 len 个数据字节读入 byte 数组。此方法首先读取所有推回字节;然后,如果读取的字节数少于 len 个字节,那么它将从底层输入流中读取字节。如果 len 不为 0,那么在至少 1 个输入字节可用之前,该方法将一直阻塞;否则,不读取任何字节并返回 0

覆盖:
FilterInputStream 中的 read
参数:
b - 读入数据的缓冲区。
off - 目标数组 b 中的初始偏移量。
len - 读取的最大字节数。
返回:
读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回 -1
抛出:
NullPointerException - 如果 bnull
IndexOutOfBoundsException - 如果 off 为负, len 为负,或者 len 大于 b.length - off
IOException - 如果已调用其 close() 方法关闭此输入流,或者发生 I/O 错误。
另请参见:
InputStream.read(byte[], int, int)

unread

public void unread(int b)
            throws IOException
推回一个字节:将其复制到推回缓冲区之前。此方法返回后,要读取的下一个字节的值将为 (byte)b

参数:
b - 要推回其低位字节的 int 值。
抛出:
IOException - 如果推回缓冲区中没有足够的空间来存储字节,或者已调用其 close() 方法关闭此输入流。

unread

public void unread(byte[] b,
                   int off,
                   int len)
            throws IOException
推回 byte 数组的某一部分:将其复制到推回缓冲区之前。此方法返回后,要读取的下一个字节的值将为 b[off],该字节之后的字节的值将为 b[off+1],依此类推。

参数:
b - 要推回的 byte 数组。
off - 数据的初始偏移量。
len - 要推回的字节数。
抛出:
IOException - 如果推回缓冲区中没有足够的空间来存储指定字节数,或者已调用其 close() 方法关闭此输入流。
从以下版本开始:
JDK1.1

unread

public void unread(byte[] b)
            throws IOException
推回一个 byte 数组:将其复制到推回缓冲区之前。此方法返回后,要读取的下一个字节的值将为 b[0],该字节之后的字节的值将为 b[1],依此类推。

参数:
b - 要推回的 byte 数组
抛出:
IOException - 如果推回缓冲区中没有足够的空间来存储指定字节数,或者已调用其 close() 方法关闭此输入流。
从以下版本开始:
JDK1.1

available

public int available()
              throws IOException
返回可以不受下一次调用此输入流的方法阻塞地从此输入流读取(或跳过)的估计字节数。下一次调用可能是相同的线程,也可能是不同的线程。一次读取或跳过该估计数个字节不会受阻塞,但是读取或跳过的字节可能少于该数。

该方法返回已被推回的字节数与 available 返回的值之和。

覆盖:
FilterInputStream 中的 available
返回:
可以不受阻塞地从此输入流读取(或跳过)的字节数。
抛出:
IOException - 如果已调用其 close() 方法关闭此输入流,或者发生 I/O 错误。
另请参见:
FilterInputStream.in, InputStream.available()

skip

public long skip(long n)
          throws IOException
从此输入流中跳过并丢弃 n 个数据字节。由于多种原因, skip 方法结束时跳过的字节数可能少于该数,也可能为 0。如果 n 为负,则不跳过任何字节。

PushbackInputStreamskip 方法首先跳过推回缓冲区中的字节(如果有)。如果需要跳过更多字节,那么它将调用底层输入流的 skip 方法。返回跳过的实际字节数。

覆盖:
FilterInputStream 中的 skip
参数:
n - 要跳过的字节数。
返回:
跳过的实际字节数。
抛出:
IOException - 如果流不支持查找操作,或者已调用其 close() 方法关闭,或者发生 I/O 错误。
从以下版本开始:
1.2
另请参见:
FilterInputStream.in, InputStream.skip(long n)

markSupported

public boolean markSupported()
测试此输入流是否支持 markreset 方法,此输入流不支持这两个方法。

覆盖:
FilterInputStream 中的 markSupported
返回:
false,因为此类不支持 markreset 方法。
另请参见:
InputStream.mark(int), InputStream.reset()

mark

public void mark(int readlimit)
在此输入流中标记当前的位置。

PushbackInputStreammark 方法不执行任何操作。

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

reset

public void reset()
           throws IOException
将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。

PushbackInputStream 的方法 reset 不执行任何操作,只抛出 IOException

覆盖:
FilterInputStream 中的 reset
抛出:
IOException - 如果调用此方法。
另请参见:
InputStream.mark(int), IOException

close

public void close()
           throws IOException
关闭此输入流并释放与该流关联的所有系统资源。关闭流之后,再调用 read()、unread()、available()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。

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

JavaTM Platform
Standard Ed. 6

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

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