java.lang.Object java.io.InputStream java.io.FilterInputStream java.io.LineNumberInputStream
@Deprecated public class LineNumberInputStream
此类是一个输入流过滤器,它提供跟踪当前行号的附加功能。
行是以回车符 ('\r'
)、换行符 ('\n'
) 或回车符后面紧跟换行符结尾的字节序列。在所有这三种情况下,都以单个换行符形式返回行终止字符。
行号以 0
开头,并在 read
返回换行符时递增 1
。
LineNumberReader
字段摘要 |
---|
从类 java.io.FilterInputStream 继承的字段 |
---|
in |
构造方法摘要 | |
---|---|
LineNumberInputStream(InputStream in) 已过时。 构造从指定输入流读取其输入的新行号输入流。 |
方法摘要 | |
---|---|
int |
available() 已过时。 无阻塞情况下返回可以从此输入流中读取的字节数。 |
int |
getLineNumber() 已过时。 返回当前行号。 |
void |
mark(int readlimit) 已过时。 在此输入流中标记当前的位置。 |
int |
read() 已过时。 从此输入流读取下一个数据字节。 |
int |
read(byte[] b, int off, int len) 已过时。 将最多 len 个数据字节从此输入流读入 byte 数组。 |
void |
reset() 已过时。 将此流重新定位到对此输入流最后调用 mark 方法时的位置。 |
void |
setLineNumber(int lineNumber) 已过时。 将行号设置为指定参数。 |
long |
skip(long n) 已过时。 跳过和放弃此输入流中的 n 个数据字节。 |
从类 java.io.FilterInputStream 继承的方法 |
---|
close, markSupported, read |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public LineNumberInputStream(InputStream in)
in
- 基础输入流。
方法详细信息 |
---|
public int read() throws IOException
0
到
255
范围内的
int
字节值。如果因流的末尾已到达而没有可用的字节,则返回值
-1
。在输入数据可用、检测到流的末尾或者抛出异常前,此方法一直阻塞。
LineNumberInputStream
的 read
方法调用基础输入流的 read
方法。它检查输入中的回车和换行符,并相应地修改当前行号。回车符或后跟换行符的回车两者都可转换为单个换行符。
FilterInputStream
中的
read
-1
。
IOException
- 如果发生 I/O 错误。
FilterInputStream.in
,
getLineNumber()
public int read(byte[] b, int off, int len) throws IOException
len
个数据字节从此输入流读入 byte 数组。在某个输入可用前,此方法一直阻塞。
LineNumberInputStream
的 read
方法重复调用 0 参数的 read
方法来填充 byte 数组。
FilterInputStream
中的
read
b
- 读入数据的缓冲区。
off
- 数据的初始偏移量。
len
- 读取的最大字节数。
-1
。
IOException
- 如果发生 I/O 错误。
read()
public long skip(long n) throws IOException
n
个数据字节。出于各种原因,该
skip
方法跳过某些较小的字节数(可能是
0
)后结束。返回跳过的实际字节数。如果
n
为负,则不跳过任何字节。
LineNumberInputStream
的 skip
方法创建 byte 数组,然后重复向其读入,直到读够 n
个字节或已到达流的末尾为止。
FilterInputStream
中的
skip
n
- 要跳过的字节数。
IOException
- 如果发生 I/O 错误。
FilterInputStream.in
public void setLineNumber(int lineNumber)
lineNumber
- 新行号。
getLineNumber()
public int getLineNumber()
setLineNumber(int)
public int available() throws IOException
注意,如果基础输入流能够在无阻塞情况下提供 k 个输入字符,则 LineNumberInputStream
可以保证在无阻塞情况下只提供 k/2 个字符,因为基础输入流中的 k 个字符可能由 k/2 个 '\r'
和 '\n'
对组成,这些对只能转换为 k/2 '\n'
个字符。
FilterInputStream
中的
available
IOException
- 如果发生 I/O 错误。
FilterInputStream.in
public void mark(int readlimit)
reset
方法的后续调用会在最后标记的位置重新定位此流,以使后续读取重新读取相同的字节。
LineNumberInputStream
的 mark
方法会记住 private 变量中的当前行号,然后调用基础输入流的 mark
方法。
FilterInputStream
中的
mark
readlimit
- 在标记位置失效前可以读取字节的最大限制。
FilterInputStream.in
,
reset()
public void reset() throws IOException
mark
方法时的位置。
LineNumberInputStream
的 reset
方法会重新将行号设置为调用 mark
方法时的行号,然后调用基础输入流的 reset
方法。
在需要提前从流中读取少量数据以查看流内容的情况下,可以使用流标记。通常,调用某些常规解析器可以非常方便地完成这项工作。如果流属于解析器处理的类型,则会非常顺利地完成。如果流不属于该类型,则解析器应该在其失败时抛出异常,如果这是在 readlimit 字节内发生的,它将允许使用外部代码重新设置该流并尝试其他解析器。
FilterInputStream
中的
reset
IOException
- 如果发生 I/O 错误。
FilterInputStream.in
,
mark(int)