Java 17 中的 LineNumberReader 是否存在不兼容性?

use*_*051 2 java io

建议使用下面的代码片段: 基本上,它完全读取字符串 One\nTwo,通过 LineNumberReader 进行管道传输。到目前为止,没有什么特别的。问题:在 Java 8 和 Java 11 上,输出为 1。然而,在 Java 17 上,输出为 2。(看起来,最后一个未终止的行在后一种情况下被计数,但在前一种情况下不被计数) 。

问题:这是已知的不兼容性吗?是否有记录并且是有意为之?

谢谢,

约亨

    final StringReader sr = new StringReader("One\nTwo");
    final LineNumberReader lnr = new LineNumberReader(sr);
    for (;;) {
        final int c = lnr.read();
        if (c == -1) {
            System.out.println("Line number=" + lnr.getLineNumber());
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Nex*_*vis 5

在我看来,Java 17 文档是故意read显示差异的:

爪哇8

读取单个字符。行终止符被压缩为单个换行符 ('\n')。每当读取行终止符时,当前行号就会递增。

爪哇11

读取单个字符。行终止符被压缩为单个换行符 ('\n')。每当读取行终止符时,当前行号就会递增。

爪哇17

读取单个字符。行终止符被压缩为单个换行符 ('\n')。每当读取行终止符时,或者到达流的末尾并且流中的最后一个字符不是行终止符时,当前行号就会递增。