- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- java.io.PushbackInputStream
-
- 实现的所有接口
-
Closeable
,AutoCloseable
public class PushbackInputStream extends FilterInputStream
PushbackInputStream
将功能添加到另一个输入流,即通过将推回的字节存储在内部缓冲区中来“推回”或“未读”字节的能力。 这在一个代码片段方便读取由特定字节值分隔的无限数量的数据字节的情况下很有用。 在读取终止字节之后,代码片段可以“解读”它,以便输入流上的下一个读取操作将重新读取被推回的字节。 例如,表示构成标识符的字符的字节可以由表示操作符的字节终止; 一个方法,其工作是只读取一个标识符,可以读取,直到它看到操作员,然后推回操作员重新读取。- 从以下版本开始:
- 1.0
-
-
字段汇总
字段 变量和类型 字段 描述 protected byte[]
buf
推回缓冲区。protected int
pos
回推缓冲区中的位置,将从中读取下一个字节。-
声明的属性在类 java.io.FilterInputStream
in
-
-
构造方法摘要
构造方法 构造器 描述 PushbackInputStream(InputStream in)
创建一个带有1字节回送缓冲区的PushbackInputStream
,并保存其参数(输入流in
)供以后使用。PushbackInputStream(InputStream in, int size)
创建PushbackInputStream
带有指定的推回缓冲器size
,并保存其参数,输入流in
,供以后使用。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 int
available()
返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。void
close()
关闭此输入流并释放与该流关联的所有系统资源。void
mark(int readlimit)
标记此输入流中的当前位置。boolean
markSupported()
测试此输入流是否支持mark
和reset
方法,但不支持。int
read()
从此输入流中读取下一个数据字节。int
read(byte[] b, int off, int len)
从此输入流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.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo
-
-
-
-
构造方法详细信息
-
PushbackInputStream
public PushbackInputStream(InputStream in, int size)
创建PushbackInputStream
带有指定的推回缓冲器size
,并保存其参数,输入流in
,供以后使用。 最初,回推缓冲区为空。- 参数
-
in
- 将从中读取字节的输入流。 -
size
- 回推缓冲区的大小。 - 异常
-
IllegalArgumentException
- 如果size <= 0
- 从以下版本开始:
- 1.1
-
PushbackInputStream
public PushbackInputStream(InputStream in)
使用1字节的回送缓冲区创建PushbackInputStream
,并保存其参数(输入流in
)供以后使用。 最初,回推缓冲区为空。- 参数
-
in
- 将从中读取字节的输入流。
-
-
方法详细信息
-
read
public int read() throws IOException
从此输入流中读取下一个数据字节。 值字节作为int
返回,范围为0
至255
。 如果由于到达流末尾而没有可用字节,则返回值-1
。 此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常。此方法返回最近推回的字节(如果有),否则调用其基础输入流的
read
方法并返回该方法返回的任何值。- 重写:
-
read
在类FilterInputStream
- 结果
-
数据的下一个字节,如果已到达流的末尾,
-1
。 - 异常
-
IOException
- 如果通过调用其close()
方法关闭此输入流,或发生I / O错误。 - 另请参见:
-
InputStream.read()
-
read
public int read(byte[] b, int off, int len) throws IOException
从此输入流len
最多len
字节的数据读入一个字节数组。 该方法首先读取任何推回的字节; 之后,如果读取的字节少于len
,则从基础输入流中读取。 如果len
不为零,则该方法将阻塞,直到至少有1个字节的输入可用; 否则,不读取任何字节,并返回0
。- 重写:
-
read
类FilterInputStream
- 参数
-
b
- 读取数据的缓冲区。 -
off
- 目标阵列b
的起始偏移量 -
len
- 读取的最大字节数。 - 结果
-
读入缓冲区的总字节数,如果由于已到达流末尾而没有更多数据,
-1
。 - 异常
-
NullPointerException
- 如果b
是null
。 -
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
通过将其复制到回送缓冲区的前面来推回一部分字节数组。 返回此方法后,要读取的下一个字节将具有值b[off]
,之后的字节将具有值b[off+1]
,依此类推。- 参数
-
b
- 要推回的字节数组。 -
off
- 数据的起始偏移量。 -
len
- 要回退的字节数。 - 异常
-
IOException
- 如果回IOException
缓冲区中没有足够的空间用于指定的字节数,或者已通过调用其close()
方法关闭此输入流。 - 从以下版本开始:
- 1.1
-
unread
public void unread(byte[] b) throws IOException
通过将字节数组复制到回送缓冲区的前面来推回字节数组。 在此方法返回后,要读取的下一个字节将具有值b[0]
,之后的字节将具有值b[1]
,依此类推。- 参数
-
b
- 要推回的字节数组 - 异常
-
IOException
- 如果回IOException
缓冲区中没有足够的空间用于指定的字节数,或者已通过调用其close()
方法关闭此输入流。 - 从以下版本开始:
- 1.1
-
available
public int available() throws IOException
返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 下一次调用可能是同一个线程或另一个线程。 单个读取或跳过这么多字节不会阻塞,但可以读取或跳过更少的字节。该方法返回已推回的字节数和
available
返回的值之和。- 重写:
-
available
类FilterInputStream
- 结果
- 无阻塞地从输入流中读取(或跳过)的字节数。
- 异常
-
IOException
- 如果通过调用其close()
方法关闭此输入流,或发生I / O错误。 - 另请参见:
-
FilterInputStream.in
,InputStream.available()
-
skip
public long skip(long n) throws IOException
跳过并从此输入流中丢弃n
字节的数据。 出于各种原因,skip
方法可能最终跳过一些较小数量的字节,可能为零。 如果n
为负数,则不跳过任何字节。skip
方法PushbackInputStream
首先跳过推回缓冲区中的字节(如果有的话)。 然后,如果需要跳过更多字节,则调用基础输入流的skip
方法。 返回跳过的实际字节数。- 重写:
-
skip
在类FilterInputStream
- 参数
-
n
- 要跳过的字节数。 - 结果
- 跳过的实际字节数。
- 异常
-
IOException
- 如果通过调用其close()
方法关闭了流,则in.skip(n)
将抛出IOException,或者发生I / O错误。 - 从以下版本开始:
- 1.2
- 另请参见:
-
FilterInputStream.in
,InputStream.skip(long n)
-
markSupported
public boolean markSupported()
测试此输入流是否支持mark
和reset
方法。- 重写:
-
markSupported
在类FilterInputStream
- 结果
-
false
,因为这个类不支持mark
和reset
方法。 - 另请参见:
-
InputStream.mark(int)
,InputStream.reset()
-
mark
public void mark(int readlimit)
标记此输入流中的当前位置。mark
方法PushbackInputStream
什么都不做。- 重写:
-
mark
类FilterInputStream
- 参数
-
readlimit
- 标记位置变为无效之前可读取的最大字节数。 - 另请参见:
-
InputStream.reset()
-
reset
public void reset() throws IOException
将此流重新定位到上次在此输入流上调用mark
方法时的位置。类
PushbackInputStream
的方法reset
除了抛出IOException
之外什么都不IOException
。- 重写:
-
reset
在类FilterInputStream
- 异常
-
IOException
- 如果调用此方法。 - 另请参见:
-
InputStream.mark(int)
,IOException
-
close
public void close() throws IOException
关闭此输入流并释放与该流关联的所有系统资源。 关闭流后,进一步的read(),unread(),available(),reset()或skip()调用将抛出IOException。 关闭先前关闭的流无效。- Specified by:
-
close
在界面AutoCloseable
- Specified by:
-
close
在界面Closeable
- 重写:
-
close
类FilterInputStream
- 异常
-
IOException
- 如果发生I / O错误。 - 另请参见:
-
FilterInputStream.in
-
-