今天我被告知,在写入文件时,您编写的编码无关紧要。我不太了解编码,但考虑到编码仅用于阅读/观看,这听起来很合理吗?
从文件中读取字节的编码是否重要? Encoding只用于解析/显示吗?
离。
var bytes = getFileBytes();
bytes.remove(new byte[] { 232, 211 });
anotherStream.writeBytes(bytes);
// I'm assuming that Encoding is irrelevant
答案 0 :(得分:2)
我认为有人可能告诉你的是,如果你必须在编码之间做出选择,只要你坚持使用,选择哪一个无关紧要。
这显然忽略了编码效率等问题(如果其中一个将典型数据存储在更少的字节中,那么显然会使用它)。
考虑相反的情况 - 您可以用一种编码编写,然后(a)忘记重新读取数据或(b)错误地读取数据。
要使用一个人为的例子,假设您出于某种原因不能在数据文件中使用小写字母i
。所以要存储它,你需要以某种方式编码它。您决定将其存储为\48
。但是现在,如果你需要,你如何明确地表示文字序列\48
?啊哈,您的编码也可以容纳它:将任何文字反斜杠存储为\5C
。但是,当然,当您重新读取文件时,您必须解码此编码,否则您将得到错误的字节。 (比你更常见的是......& nk!)
答案 1 :(得分:1)
当您只是从文件中读取 bytes 并且不尝试将这些字节解释为 text 时,编码无关紧要。例如,如果您希望将文件复制到另一个文件或将文件复制到套接字,则可以安全地忽略编码。显然,如果流包含二进制数据,例如,您也不需要编码。二进制形式的int
s序列。您的示例也非常有效,除非您不将232
和211
字节理解为字符。
但是,当你开始将某些文件(或任何字节序列,例如字节数组)解释为 text 时,你只是不能忽略编码,因为可以通过某种编码将字节转换为仅字符。当然,在使用FileReader
之类的东西时通常不能指定编码,但是,在这种情况下,编码是隐式指定的,通常使用您的语言环境编码作为默认值。因此,最好始终指定从字节流中加载字符数据时要使用的编码(例如通过InputStreamReader
),因此实际编码不依赖于系统你正在运行你的程序。