1个字节应该足以存储一个字符,而不是为什么java使用2个字节,而另一个令人困惑的事情是使用FileInputStream,它以字节方式执行所有操作如何读取字符
答案 0 :(得分:3)
Java char数据类型为16位,字节为8位。
这是因为Java Strings是unicode字符串,而不是ASCII字符串,允许标准Java字符串在全球大多数语言中使用。
答案 1 :(得分:0)
FileInputStream(以及从InputStream继承的其他类)确实是“面向字节的”,它不适合读取字符数据。
如果您需要阅读文本文件,您应该尝试这样做:
new InputStreamReader(new FileInputStream(file), "UTF8")
当然,您需要事先了解文件编码。
如果您只需要将文件读入字符串并且文件不是特别大,最简单的方法是调用FileUtils.readFileToString。有关详细信息,请参阅Apache Commons IO javadoc。
<强>更新-201301191245 强> 对于那些天真地认为他们可以从文件中读取字节到字节数组的人,然后将字节数组转换为字符串:这个对UTF-8不起作用,因为它可能包含多字节字符。请考虑以下事项:
想象一下情况:
假设您将“E2 82”读入固定大小缓冲区的末尾,并在下一个读取周期中读取“AC”。当您尝试将字节“E2 B2”转换为java字符时,结果将是损坏的文本数据。