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

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


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

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

sb.appendCodePoint(c);


是否有一个已知的测试用例(一系列UTF-8字节)可以区分这两种选择?

最佳答案

正如Javadoc所说,Reader以单个字符的形式返回它对下一个输入所做的一切。唯一的例外是EOS指标,作为int. -1。您的建议没有根据。

关于java - InputStreamReader是否应与appendCodePoint一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19108336/

10-10 16:35