- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- java.io.PushbackInputStream
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
public class PushbackInputStream extends FilterInputStream
APushbackInputStream
通过将推回的字节存储在内部缓冲区中,将功能添加到另一个输入流,即“推回”或“未读”字节的功能。 这在代码片段方便读取由特定字节值分隔的无限数量的数据字节的情况下非常有用; 读取终止字节后,代码段可以“未读”,以便输入流上的下一个读操作将重新读取被推回的字节。 例如,表示构成标识符的字符的字节可以被表示操作符的字节终止; 一个只能读取一个标识符的工作方法可以读取,直到它看到操作者,然后将操作员推回以重新读取。- 从以下版本开始:
- 1.0
-
-
Field Summary
Fields Modifier and Type Field 描述 protected byte[]
buf
推回缓冲区。protected int
pos
推回缓冲区中的位置,从该位置读取下一个字节。-
Fields inherited from class java.io.FilterInputStream
in
-
-
构造方法摘要
构造方法 Constructor 描述 PushbackInputStream(InputStream in)
创建一个带有1字节后缓冲区的PushbackInputStream
,并保存其参数,输入流in
供以后使用。PushbackInputStream(InputStream in, int size)
使用指定的size
的推回缓冲区创建一个PushbackInputStream
,并保存其参数,输入流in
供以后使用。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 int
available()
从下一次调用此输入流的方法返回可从该输入流读取(或跳过)的字节数,而不会阻塞。void
close()
关闭此输入流并释放与流相关联的任何系统资源。void
mark(int readlimit)
标记此输入流中的当前位置。boolean
markSupported()
测试这个输入流是否支持mark
和reset
方法,而不是。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)
通过将其复制到推回缓冲区的前端来推回一个字节。-
Methods inherited from class java.io.FilterInputStream
read
-
Methods inherited from class java.io.InputStream
readAllBytes, readNBytes, transferTo
-
-
-
-
构造方法详细信息
-
PushbackInputStream
public PushbackInputStream(InputStream in, int size)
使用指定的size
的推回缓冲区创建一个PushbackInputStream
,并保存其参数,输入流in
供以后使用。 最初,推回缓冲区为空。- 参数
-
in
- 读取字节的输入流。 -
size
- 推回缓冲区的大小。 - 异常
-
IllegalArgumentException
- 如果是size <= 0
- 从以下版本开始:
- 1.1
-
PushbackInputStream
public PushbackInputStream(InputStream in)
创建一个PushbackInputStream
与1字节的推回缓冲区,并保存其参数,输入流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
不为零,该方法将阻塞,直到输入的至少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
低位字节推回的值为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
类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
方法时的位置。该方法
reset
类PushbackInputStream
什么也不做只是抛出一个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
-
-