java.lang.Object
java.io.InputStream
java.io.FilterInputStream
java.io.PushbackInputStream
- 所有已实现的接口:
-
Closeable
,AutoCloseable
PushbackInputStream
添加了对另一个输入流的功能,即能够“推回”或“未读”字节,通过将推回的字节存储在内部缓冲区中。在代码片段需要读取由特定字节值分隔的不定数量数据字节的情况下,这是很方便的;在读取终止字节后,代码片段可以“未读”它,这样输入流上的下一个读取操作将重新读取被推回的字节。例如,表示标识符构成字符的字节可能由表示运算符字符的字节终止;一个负责仅读取标识符的方法可以读取直到看到运算符,然后将运算符推回以便重新读取。
- 自版本:
- 1.0
-
Field Summary
Modifier and TypeFieldDescriptionprotected byte[]
推回缓冲区。protected int
下一个将被读取的字节在推回缓冲区内的位置。Fields declared in class java.io.FilterInputStream
in
-
Constructor Summary
ConstructorDescription创建一个带有1字节推回缓冲区的PushbackInputStream
,并保存其参数,输入流in
,以供以后使用。PushbackInputStream
(InputStream in, int size) 创建一个具有指定size
推回缓冲区的PushbackInputStream
,并保存其参数,输入流in
,以供以后使用。 -
Method Summary
Modifier and TypeMethodDescriptionint
返回可以从此输入流读取(或跳过)的字节数的估计值,而不会被下一次对此输入流的方法调用阻塞。void
close()
关闭此输入流并释放与流相关的任何系统资源。void
mark
(int readlimit) 在此输入流中标记当前位置。boolean
检查此输入流是否支持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 declared in class java.io.FilterInputStream
read
Methods declared in class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Field Details
-
buf
protected byte[] buf推回缓冲区。- 自版本:
- 1.1
-
pos
protected int pos下一个将被读取的字节在推回缓冲区内的位置。当缓冲区为空时,pos
等于buf.length
;当缓冲区满时,pos
等于零。- 自版本:
- 1.1
-
-
Constructor Details
-
PushbackInputStream
创建一个具有指定size
推回缓冲区的PushbackInputStream
,并保存其参数,输入流in
,以供以后使用。最初,推回缓冲区为空。- 参数:
-
in
- 将从中读取字节的输入流。 -
size
- 推回缓冲区的大小。 - 抛出:
-
IllegalArgumentException
- 如果size <= 0
- 自版本:
- 1.1
-
PushbackInputStream
创建一个带有1字节推回缓冲区的PushbackInputStream
,并保存其参数,输入流in
,以供以后使用。最初,推回缓冲区为空。- 参数:
-
in
- 将从中读取字节的输入流。
-
-
Method Details
-
read
从此输入流读取下一个数据字节。值字节作为int
在范围0
到255
内返回。如果没有字节可用,因为已到达流的末尾,则返回值-1
。此方法将阻塞,直到有输入数据可用,检测到流的末尾,或抛出异常。如果有最近推回的字节,则此方法返回该字节,否则调用其基础输入流的
read
方法并返回该方法返回的任何值。- 覆盖:
-
read
在类FilterInputStream
- 返回:
-
下一个数据字节,如果已到达流的末尾,则为
-1
。 - 抛出:
-
IOException
- 如果通过调用其close()
方法关闭了此输入流,或发生I/O错误。 - 参见:
-
read
从此输入流中读取最多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错误。 - 参见:
-
unread
通过将其复制到推回缓冲区的前面,将一个字节推回。此方法返回后,将要读取的下一个字节将具有值(byte)b
。- 参数:
-
b
- 要推回其低位字节的int
值。 - 抛出:
-
IOException
- 如果推回缓冲区中没有足够的空间存储该字节,或通过调用其close()
方法关闭了此输入流。
-
unread
通过将其复制到推回缓冲区的前面,将字节数组的一部分推回。此方法返回后,将要读取的下一个字节将具有值b[off]
,接下来的字节将具有值b[off+1]
,依此类推。- 参数:
-
b
- 要推回的字节数组。 -
off
- 数据的起始偏移量。 -
len
- 要推回的字节数。 - 抛出:
-
NullPointerException
- 如果b
为null
。 -
IOException
- 如果推回缓冲区中没有足够的空间存储指定数量的字节,或通过调用其close()
方法关闭了此输入流。 - 自版本:
- 1.1
-
unread
通过将其复制到推回缓冲区的前面,将一个字节数组推回。此方法返回后,将要读取的下一个字节将具有值b[0]
,接下来的字节将具有值b[1]
,依此类推。- 参数:
-
b
- 要推回的字节数组 - 抛出:
-
NullPointerException
- 如果b
为null
。 -
IOException
- 如果推回缓冲区中没有足够的空间存储指定数量的字节,或通过调用其close()
方法关闭了此输入流。 - 自版本:
- 1.1
-
available
返回可以从此输入流读取(或跳过)的字节数的估计值,而不会被下一次对此输入流的方法调用阻塞。下一次调用可能是同一个线程或另一个线程。读取或跳过这么多字节将不会阻塞,但可能读取或跳过更少的字节。该方法返回已推回的字节数和
available
方法返回的值的总和。- 覆盖:
-
available
在类FilterInputStream
- 返回:
- 可以从输入流中读取(或跳过)的字节数。
- 抛出:
-
IOException
- 如果通过调用其close()
方法关闭了此输入流,或发生I/O错误。 - 参见:
-
skip
跳过并丢弃此输入流中的n
字节数据。由于各种原因,skip
方法可能最终会跳过一些较少数量的字节,可能为零。如果n
为负数,则不会跳过任何字节。PushbackInputStream
的skip
方法首先跳过推回缓冲区中的字节(如果有)。然后调用基础输入流的skip
方法,如果需要跳过更多字节。返回实际跳过的字节数。- 覆盖:
-
skip
在类中FilterInputStream
- 参数:
-
n
- 要跳过的字节数。 - 返回:
- 实际跳过的字节数。
- 抛出:
-
IOException
- 如果通过调用其close()
方法关闭流,in.skip(n)
抛出IOException,或发生I/O错误。 - 自:
- 1.2
- 参见:
-
markSupported
public boolean markSupported()检查此输入流是否支持mark
和reset
方法,但它不支持。- 覆盖:
-
markSupported
在类中FilterInputStream
- 返回:
-
false
,因为此类不支持mark
和reset
方法。 - 参见:
-
mark
public void mark(int readlimit) 在此输入流中标记当前位置。PushbackInputStream
的mark
方法不执行任何操作。- 覆盖:
-
mark
在类中FilterInputStream
- 参数:
-
readlimit
- 在标记位置变为无效之前可读取的最大字节数。 - 参见:
-
reset
将此流重新定位到上次在此输入流上调用mark
方法时的位置。类
PushbackInputStream
的reset
方法除了抛出IOException
外不执行任何操作。- 覆盖:
-
reset
在类中FilterInputStream
- 抛出:
-
IOException
- 如果调用此方法。 - 参见:
-
close
关闭此输入流并释放与流相关联的任何系统资源。一旦关闭流,进一步的read()、unread()、available()、reset()或skip()调用将抛出IOException。关闭先前关闭的流没有任何效果。- 指定者:
-
close
在接口中AutoCloseable
- 指定者:
-
close
在接口中Closeable
- 覆盖:
-
close
在类中FilterInputStream
- 抛出:
-
IOException
- 如果发生I/O错误。 - 参见:
-