8230342: LineNumberReader.getLineNumber() returns inconsistent results after EOF

Brian Burkhalter brian.burkhalter at oracle.com
Mon Sep 9 21:02:39 UTC 2019


If we wanted to go the route of changing the spec to match the behavior, the additional verbiage below is one possibility.

Thanks,

Brian

+++ b/src/java.base/share/classes/java/io/LineNumberReader.java
@@ -35,19 +35,20 @@
  * <p> By default, line numbering begins at 0. This number increments at every
  * <a href="#lt">line terminator</a> as the data is read, and can be changed
  * with a call to {@code setLineNumber(int)}.  Note however, that
  * {@code setLineNumber(int)} does not actually change the current position in
  * the stream; it only changes the value that will be returned by
  * {@code getLineNumber()}.
  *
  * <p> A line is considered to be <a id="lt">terminated</a> by any one of a
  * line feed ('\n'), a carriage return ('\r'), or a carriage return followed
- * immediately by a linefeed.
+ * immediately by a linefeed. For {@link #readLine()} only, the end of the
+ * stream is also considered to be a line terminator.

 
 public class LineNumberReader extends BufferedReader {
 
     /** The current line number */
     private int lineNumber = 0;
@@ -183,19 +184,21 @@
                 }
             }
 
             return n;
         }
     }
 
     /**
      * Read a line of text.  Whenever a <a href="#lt">line terminator</a> is
-     * read the current line number is incremented.
+     * read the current line number is incremented.  Unlike for the other
+     * {@code read} methods of this class, reaching the end of the stream
+     * will also increment the current line number.
      *
      * @return  A String containing the contents of the line, not including
      *          any <a href="#lt">line termination characters</a>, or
      *          {@code null} if the end of the stream has been reached
      *
      * @throws  IOException
      *          If an I/O error occurs
      */
     public String readLine() throws IOException {

> On Sep 9, 2019, at 12:02 PM, Brian Burkhalter <brian.burkhalter at oracle.com> wrote:
> 
>> On Sep 9, 2019, at 7:35 AM, Roger Riggs <Roger.Riggs at oracle.com <mailto:Roger.Riggs at oracle.com>> wrote:
>> 
>> I would lean toward updating the spec to reflect the current implementation.
> 
> It seems strange however that if one read an entire stream using read() in one case and readLine() in another that the results would differ.



More information about the core-libs-dev mailing list