0

今天有人告诉我,在写入文件时,您写入的编码无关紧要。我对编码知之甚少,但考虑到编码仅用于阅读/查看,这听起来很合理?

从文件中读取字节的编码是否重要?那里的编码仅用于解析/显示吗?

前任。

var bytes = getFileBytes();
bytes.remove(new byte[] { 232, 211 });
anotherStream.writeBytes(bytes);
// I'm assuming that Encoding is irrelevant 
4

2 回答 2

2

我认为有人可能会告诉您,如果您必须在编码之间进行选择,那么只要坚持下去,您选择哪一种都没有关系。

这显然忽略了编码效率等问题(如果其中一个以更少的字节存储您的典型数据,那么显然使用它)。

考虑相反的情况 - 您可以使用一种编码写入,然后 (a) 忘记读回数据或 (b) 错误地读取数据。

举一个人为的例子,假设i由于某种原因您不能在数据文件中使用小写字母。因此,要存储它,您需要以某种方式对其进行编码。您决定将其存储为\48. 但是现在,你如何\48明确地表示文字序列,你应该需要吗?啊哈,您的编码也可以适应这一点:将任何文字反斜杠存储为\5C. 但是当然,当你重新读入文件时,你必须解码这个编码,否则你会得到错误的字节。(ThÁ&sÁ&s 比你想象的更常见!)

于 2013-05-16T03:34:07.077 回答
1

当您只是从文件中读取字节并且不尝试将这些字节解释为文本时,编码并不重要。例如,如果您想将文件复制到另一个文件或将文件复制到套接字,则可以放心地忽略编码。显然,如果流包含二进制int数据,例如二进制形式的 s 序列,您也不需要编码。你的例子也是完全有效的,除非你不理解232211字节作为字符。

但是,当您开始某个文件(或任何字节序列,例如字节数组)解释为text时,您就不能忽略编码,因为字节只能通过某种编码方式转换为字符。当然,在使用类似的东西时通常可以不指定编码FileReader,但是,在这种情况下,编码是隐式指定的,通常使用您的语言环境编码作为默认值。因此,从字节流(例如 via )加载字符数据时,最好始终指定您打算使用的编码InputStreamReader,这样实际的编码将不依赖于您运行程序的系统。

于 2013-05-16T06:01:25.137 回答