java.lang.Object
|
+----java.io.InputStream
|
+----java.io.FilterInputStream
|
+----java.io.LineNumberInputStream
注释:不推荐使用 LineNumberInputStream 类。 这个类假定字节表示字符。同 JDK 1.1 版中的类似,字符流操作的最佳方法是使用新的字符流类,包括计算行号的类。
这个类是一个输入流过滤器,它提供跟踪当前行号的附加功能。
一个行是一个字符序列,以回车符('\r') 、换行符
('\n')或跟随一个换行符的回车符结束。 在所有这三种情况下,行结束符都作为一个单新行符返回。
行号开始于0, 且当read 返回一个换行符时增
1。
len 个字节数据读入一个字节数组中。
mark 方法时所标记的位置。
n 字节数据。
public LineNumberInputStream(InputStream in)
public int read() throws IOException
0 到 255 范围内的一个 int 数。如果已读到流的末尾,没有再可读的字节时,则返回 -1。
该方法将一直阻塞,直到有输入数据、检测到了数据流尾或抛出异常。
LineNumberInputStream 的 read 方法,用三个参数
stream, 0 和 b.length 调用具有三个参数的 read 方法。 它检查输入中的回车符和换行符,将当前行号修改为正确的。回车符和跟随一个换行符的回车符都被转换为一个单一换行符。
-1 。
public int read(byte b[],
int off,
int len) throws IOException
len 个字节数据读入一个字节数组中。 这个方法将阻塞直到有输入数据可用。
LineNumberInputStream 的 read 方法,重复调用无参数的 read 方法来添充此字节数组。
-1。
public void setLineNumber(int lineNumber)
public int getLineNumber()
public long skip(long n) throws IOException
n 字节数据。
skip 方法可能因各种原因终止跳过一些较小的字节数(可能是零)。返回实际跳过的字节数。
LineNumberInputStream 的 skip 方法创建一个长度为
n 的数组,然后将数据读入此数组,直到读了n 个字节的数据,或已到达了此流末尾。
public int available() throws IOException
注意如果基本输入流能支持无阻塞读取 k 个输入字符,那么 LineNumberInputStream 仅能保证支持无阻塞读取
k/2 个字符,因为基本输入流中的 k 个字符可能由 k/2 对'\r' 和
'\n' 组成, 而它们正好被转换为 k/2
'\n' 个字符。
public void mark(int readlimit)
reset 方法重新将流定位于最后标记位置,以便后续读取能重新读取相同字节。
LineNumberInputStream 的 mark 方法用正确的变量记载当前行,然后调用基本输入流的 mark 方法。
public void reset() throws IOException
mark 方法时所标记的位置。
LineNumberInputStream 的 reset 方法将行号复位成调用 mark 时的行号,然后调用基本输入流的 reset 方法。
当读取前需要先读少许以查看流内容时,可以使用流标记。 通过调用一些通用的语法分析器来实现这个功能是最容易的。若该流是语法分析器处理的类型,则正常通过。否则失败时语法分析器应抛出异常,如果这发生在 readlimit 个字节内,则允许外部代码复位该流且尝试使用另一个语法分析器。