0

使用 InputStreamReader 从文件中读取字符并将它们附加到 StringBuilder 是 Java 中的一种常见模式;显而易见的方法是:

int c = reader.read();
sb.append((char)c);

但是,假设文件(假设我们指定了 UTF-8 编码,如果它有所不同)将包含一个不适合 16 位的字符(严格来说是一个代码点)。读者会将此作为单个 32 位代码点而不是一对 16 位字符返回吗?

如果是这样,上面的最后一行实际上应该是这样的:

sb.appendCodePoint(c);

是否有一个已知的测试用例 - 一个 UTF-8 字节序列 - 可以区分这两个选项?

4

1 回答 1

1

正如 Javadoc 所说,Reader 将它可以对下一段输入的任何内容作为单个字符返回。唯一的例外是 EOS 指标,它是 -1,int.因为您的建议没有依据。

于 2013-10-01T05:06:51.610 回答