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)
        
    