A DESCRIPTION OF THE PROBLEM :
LineNumberReader.getLineNumber() returns inconsistent results after reaching EOF depending on the methods which were called to read.
readLine() always returns a line number one higher than if EOF has been reached using the other methods.
---------- BEGIN SOURCE ----------
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.StringReader;
public class EofLineNumberTest {
public static void main(String[] args) throws IOException {
String string = "first \n second";
/*
* getLineNumber() is described as "Get the current line number."
* However, the result is inconsistent after EOF
*/
System.out.println("Line number after EOF:");
System.out.println(" read(): " + linesRead(string));
System.out.println(" read(char[]): " + linesReadBuffer(string));
System.out.println(" readLine(): " + linesReadLine(string));
}
private static int linesRead(String string) throws IOException {
LineNumberReader reader = new LineNumberReader(new StringReader(string));
while (reader.read() != -1) { }
return reader.getLineNumber();
}
private static int linesReadBuffer(String string) throws IOException {
LineNumberReader reader = new LineNumberReader(new StringReader(string));
char[] buff = new char[512];
while (reader.read(buff) != -1) { }
return reader.getLineNumber();
}
private static int linesReadLine(String string) throws IOException {
LineNumberReader reader = new LineNumberReader(new StringReader(string));
while (reader.readLine() != null) { }
return reader.getLineNumber();
}
}
---------- END SOURCE ----------
FREQUENCY : always
LineNumberReader.getLineNumber() returns inconsistent results after reaching EOF depending on the methods which were called to read.
readLine() always returns a line number one higher than if EOF has been reached using the other methods.
---------- BEGIN SOURCE ----------
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.StringReader;
public class EofLineNumberTest {
public static void main(String[] args) throws IOException {
String string = "first \n second";
/*
* getLineNumber() is described as "Get the current line number."
* However, the result is inconsistent after EOF
*/
System.out.println("Line number after EOF:");
System.out.println(" read(): " + linesRead(string));
System.out.println(" read(char[]): " + linesReadBuffer(string));
System.out.println(" readLine(): " + linesReadLine(string));
}
private static int linesRead(String string) throws IOException {
LineNumberReader reader = new LineNumberReader(new StringReader(string));
while (reader.read() != -1) { }
return reader.getLineNumber();
}
private static int linesReadBuffer(String string) throws IOException {
LineNumberReader reader = new LineNumberReader(new StringReader(string));
char[] buff = new char[512];
while (reader.read(buff) != -1) { }
return reader.getLineNumber();
}
private static int linesReadLine(String string) throws IOException {
LineNumberReader reader = new LineNumberReader(new StringReader(string));
while (reader.readLine() != null) { }
return reader.getLineNumber();
}
}
---------- END SOURCE ----------
FREQUENCY : always
- relates to
-
JDK-8235792 LineNumberReader.getLineNumber() behavior is inconsistent with respect to EOF
-
- Resolved
-
-
JDK-8230343 LineNumberReader.read(char[] cbuf, int off, int len) sets skipLF
-
- Open
-
-
JDK-8230344 LineNumberReader.skipLF is not considered by all methods
-
- Open
-
-
JDK-8230345 LineNumberReader.ready() can return true despite read() blocking
-
- Open
-
-
JDK-8235668 LineNumberReader#getLineNumber() returns wrong line number (one fewer) in Lucene test
-
- Closed
-
- links to
(1 links to)