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