JavaTM 2 Platform
Standard Ed. 5.0

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 个数据字节读入字节数组。
 void reset()
          将此流重新定位到对此输入流最后调用 mark 方法时的位置。
 long skip(long n)
          从此输入流中跳过并丢弃 n 个数据字节。
 void unread(byte[] b)
          推回一个字节数组,方法是将其复制到推回缓冲区前面。
 void unread(byte[] b, int off, int len)
          推回字节数组的某一部分,方法是将其复制到推回缓冲区前面。
 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 将等于零。

从以下版本开始:
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
从此输入流中读取下一个数据字节。返回 0255 范围内的 int 字节值。如果因流的末尾已到达而没有可用的字节,则返回值 -1。在输入数据可用、检测到流的末尾或者抛出异常前,此方法一直阻塞。

此方法返回最近推回的字节(如果存在),否则调用其基础输入流的 read 方法,并返回该方法返回的任何值。

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

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
从此输入流将最多 len 个数据字节读入字节数组。此方法首先读取任何推回字节;然后,如果读取数少于 len 个字节,则它将从基础输入流读取。在至少 1 个输入字节可用前,此方法一直阻塞。

覆盖:
FilterInputStream 中的 read
参数:
b - 读入数据的缓冲区。
off - 数据的初始偏移量。
len - 读取的最大字节数。
返回:
读入缓冲区的总字节数,如果由于流末尾已到达而不再有数据,则返回 -1
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
InputStream.read(byte[], int, int)

unread

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

参数:
b - 要推回其低位字节的 int 值。
抛出:
IOException - 如果推回缓冲区中没有存储字节的足够空间。

unread

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

参数:
b - 要推回的字节数组。
off - 数据的初始偏移量。
len - 要推回的字节数。
抛出:
IOException - 如果推回缓冲区中没有存储指定字节数的足够空间。
从以下版本开始:
JDK1.1

unread

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

参数:
b - 要推回的字节数组
抛出:
IOException - 如果推回缓冲区中没有存储指定字节数的足够空间。
从以下版本开始:
JDK1.1

available

public int available()
              throws IOException
返回可以不受阻塞地从此输入流读取的字节数。此方法调用基础输入流的 available 方法;它返回该值加上已被推回的字节数。

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

skip

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

PushbackInputStreamskip 方法首先跳过推回缓冲区中的字节(如果存在)。如果需要跳过更多字节,接着它将调用基础输入流的 skip 方法。返回跳过的实际字节数。

覆盖:
FilterInputStream 中的 skip
参数:
n - 要跳过的字节数。
返回:
跳过的实际字节数。
抛出:
IOException - 如果发生 I/O 错误。
从以下版本开始:
1.2
另请参见:
FilterInputStream.in, InputStream.skip(long n)

markSupported

public boolean markSupported()
测试此输入流是否支持 markreset 方法以及不支持哪一个。

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

mark

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

PushbackInputStreammark 方法不执行任何操作。

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

reset

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

除了抛出 IOException 之外,类 PushbackInputStream 的方法 reset 不执行任何操作。

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

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. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策