java.io
public class: LineNumberReader [javadoc |
source]
java.lang.Object
java.io.Reader
java.io.BufferedReader
java.io.LineNumberReader
All Implemented Interfaces:
Closeable, Readable
A buffered character-input stream that keeps track of line numbers. This
class defines methods
#setLineNumber(int) and
#getLineNumber() for setting and getting the current line number
respectively.
By default, line numbering begins at 0. This number increments at every
line terminator as the 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.
- author:
Mark - Reinhold
- since:
JDK1.1 -
| Constructor: |
public LineNumberReader(Reader in) {
super(in);
}
Create a new line-numbering reader, using the default input-buffer
size. Parameters:
in -
A Reader object to provide the underlying stream
|
public LineNumberReader(Reader in,
int sz) {
super(in, sz);
}
Create a new line-numbering reader, reading characters into a buffer of
the given size. Parameters:
in -
A Reader object to provide the underlying stream
sz -
An int specifying the size of the buffer
|
| Methods from java.lang.Object: |
|---|
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method from java.io.LineNumberReader Detail: |
public int getLineNumber() {
return lineNumber;
}
Get the current line number. |
public void mark(int readAheadLimit) throws IOException {
synchronized (lock) {
super.mark(readAheadLimit);
markedLineNumber = lineNumber;
markedSkipLF = skipLF;
}
}
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. |
public int read() throws IOException {
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;
}
}
Read a single character. Line terminators are
compressed into single newline ('\n') characters. Whenever a line
terminator is read the current line number is incremented. |
public int read(char[] cbuf,
int off,
int len) throws IOException {
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;
}
}
Read characters into a portion of an array. Whenever a line terminator is read the current line number is
incremented. |
public String readLine() throws IOException {
synchronized (lock) {
String l = super.readLine(skipLF);
skipLF = false;
if (l != null)
lineNumber++;
return l;
}
}
Read a line of text. Whenever a line terminator is
read the current line number is incremented. |
public void reset() throws IOException {
synchronized (lock) {
super.reset();
lineNumber = markedLineNumber;
skipLF = markedSkipLF;
}
}
Reset the stream to the most recent mark. |
public void setLineNumber(int lineNumber) {
this.lineNumber = lineNumber;
}
Set the current line number. |
public long skip(long n) throws IOException {
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;
}
}
|