Hi Brian,

I would lean toward updating the spec to reflect the current implementation.

A simple program that uses readline and prints the line number and line would show a duplicate line number.

try (LineNumberReader r =
             new LineNumberReader(Files.newBufferedReader(Path.of(args[0])))) {
    String s;
    while ((s = r.readLine()) !=null) {
        System.out.printf("%3d: %s%n", r.getLineNumber(), s);
    }
}

  1: 123
  1: ABC

Other questions and comments:

- Is the use of AtomicBoolean due to concurrency concerns?
  If not, a new boolean[1] would be less overhead

- BufferedReader also keeps track of CR/LF pairs and I've thought it would simpler
  not to duplicate the line number counting logic in LineNumberReader.
  If BufferedReader kept track of the line number, it could expose a package private field   to LineNumberReader to make it visible to the get/SetLineNumber methods of LineNumberReader.

Regards, Roger


On 9/5/19 11:11 AM, Brian Burkhalter wrote:
https://bugs.openjdk.java.net/browse/JDK-8230342
http://cr.openjdk.java.net/~bpb/8230342/webrev.00/

When the last line is read by readLine() the line number is incremented due to 
the EOF but not when read() or read(char[]) is used. The specification states 
it is incremented on line terminators only. The alternative solution would be 
to change the specification to state that the line number is also incremented 
on EOF even if there is no line terminator at the end of the stream. That would 
entail a different implementation change.

Thanks,

Brian

Reply via email to