LineNumberReaderpublic class LineNumberReader extends BufferedReader A buffered character-input stream that keeps track of line numbers.
This class defines methods void setLineNumber(int) and
int getLineNumber() for setting and getting the current
line number respectively.
By default, line numbering begins at 0. This number increments as data is
read, and can be changed with a call to setLineNumber(int) .
Note however, that setLineNumber(int) does not actually change the current
position in the stream; it only changes the value that will be returned
by getLineNumber() .
A line is considered to be terminated by any one of a line feed ('\n'), a carriage
return ('\r'), or a carriage return followed immediately by a linefeed. |
Fields Summary |
---|
private int | lineNumberThe current line number | private int | markedLineNumberThe line number of the mark, if any | private boolean | skipLFIf the next character is a line feed, skip it | private boolean | markedSkipLFThe skipLF flag when the mark was set | private static final int | maxSkipBufferSizeMaximum skip-buffer size | private char[] | skipBufferSkip buffer, null until allocated |
Constructors Summary |
---|
public LineNumberReader(Reader in)Create a new line-numbering reader, using the default input-buffer
size.
super(in);
| public LineNumberReader(Reader in, int sz)Create a new line-numbering reader, reading characters into a buffer of
the given size.
super(in, sz);
|
Methods Summary |
---|
public int | getLineNumber()Get the current line number.
return lineNumber;
| public void | mark(int readAheadLimit)Mark the present position in the stream. Subsequent calls to reset()
will attempt to reposition the stream to this point, and will also reset
the line number appropriately.
synchronized (lock) {
super.mark(readAheadLimit);
markedLineNumber = lineNumber;
markedSkipLF = skipLF;
}
| public int | read()Read a single character. Line terminators are compressed into single
newline ('\n') characters.
synchronized (lock) {
int c = super.read();
if (skipLF) {
if (c == '\n")
c = super.read();
skipLF = false;
}
switch (c) {
case '\r":
skipLF = true;
case '\n": /* Fall through */
lineNumber++;
return '\n";
}
return c;
}
| public int | read(char[] cbuf, int off, int len)Read characters into a portion of an array.
synchronized (lock) {
int n = super.read(cbuf, off, len);
for (int i = off; i < off + n; i++) {
int c = cbuf[i];
if (skipLF) {
skipLF = false;
if (c == '\n")
continue;
}
switch (c) {
case '\r":
skipLF = true;
case '\n": /* Fall through */
lineNumber++;
break;
}
}
return n;
}
| public java.lang.String | readLine()Read a line of text. A line is considered to be terminated by any one
of a line feed ('\n'), a carriage return ('\r'), or a carriage return
followed immediately by a linefeed.
synchronized (lock) {
String l = super.readLine(skipLF);
skipLF = false;
if (l != null)
lineNumber++;
return l;
}
| public void | reset()Reset the stream to the most recent mark.
synchronized (lock) {
super.reset();
lineNumber = markedLineNumber;
skipLF = markedSkipLF;
}
| public void | setLineNumber(int lineNumber)Set the current line number.
this.lineNumber = lineNumber;
| public long | skip(long n)Skip characters.
if (n < 0)
throw new IllegalArgumentException("skip() value is negative");
int nn = (int) Math.min(n, maxSkipBufferSize);
synchronized (lock) {
if ((skipBuffer == null) || (skipBuffer.length < nn))
skipBuffer = new char[nn];
long r = n;
while (r > 0) {
int nc = read(skipBuffer, 0, (int) Math.min(r, nn));
if (nc == -1)
break;
r -= nc;
}
return n - r;
}
|
|