读取文件返回的字节与Java中字符串的getbytes之间的差异?

时间:2014-03-18 18:40:05

标签: java

将文件直接读入字节数组会比将数据读入字符串然后从中获取字节提供不同的输出。

直接从文件读取的字节的形式是什么?它与String中的get字节有什么不同。

1 个答案:

答案 0 :(得分:2)

  

将文件直接读入字节数组会比将数据读入字符串然后从中获取字节提供不同的输出。

嗯,它可能会。它可能不会。这取决于您如何将文件作为文本阅读,以及您如何将文本转换回字节。

如果您在两个方向上使用相同的编码,则该文件最初包含该编码中的文本,那么您可能会获得相同的字节。但是如果您使用错误的编码(例如,您将ISO-8859-1编码的文本读作UTF-8),或者如果您使用不同的编码进行两次转换,那么你很可能会得到不同的结果。

将文本视为有点像图像格式 - 如果您读取.png文件然后写出.jpeg文件,您不会期望具有相同的字节,不是吗?同样,如果您尝试使用JPEG解码器读取.png文件,则可能会出现垃圾(或更可能是错误)。

基本上,认为文本是一个字节序列 - 它不是。可以认为它是完全独立的,编码用于在文本和二进制表示之间进行转换。有关详细信息,请参阅Marc Gravell's blog post on IO