[英]Why is Files.readAllBytes() not accepting an encoding parameter?
不确定我是否正确理解这一点,但我在想,当我需要将文件内容作为字节数组存储在 Java 中时,我需要为 Java 提供文件的编码。
如果我想用一个准备好的例子来做,我需要做类似的事情:
Reader reader = Files.newBufferedReader(myFilePath, StandardCharsets.ISO_8859_1)
为什么我不能在使用Files.readAllBytes(myFilePath)
时指定文件的编码? 我想做类似Files.readAllBytes(myFilePath, StandardCharsets.ISO_8859_1)
的事情。
我弄错了吗?
是的,你错了。 但是很容易出错……如果您不了解 Java 建模文本数据的方式。
您将 Reader / Writer 的功能与 InputStream / OutputStream 的功能混为一谈。
现在很多Reader
和Writer
类实际上同时执行两个功能; 即获取或接收数据并将数据转换为字符/从字符转换。 在某些情况下,您可以通过提供编码告诉 class 如何执行转换步骤。
相比之下, InputStream
或OutputStream
是字节的源或接收器,通常1不进行任何字符转换。
对于Files.readAllBytes
,该方法是从文件中读取所有字节并将它们放入字节数组中。 它不需要Charset
参数,因为它不是为进行任何解码而设计的。
另一方面, Files.readAllLines
确实需要一个Charset
。 那是因为它将文件内容作为表示文件行的String
对象数组提供。 在将字节转换为 Java String
时,您需要说明字节表示的文本/字符是如何编码的。
1 - 假设它可以......但你会看到 Java 不提供像ReaderInputStream
或WriterOutputStream
这样的类。 几乎不需要它们。
不,如果要将字节表示为String
(即文本),则只需要一个Charset
集,因为字节的含义取决于编码。
byte[] bytes = Files.readAllBytes(Paths.get("/temp.txt"));
String text = new String(bytes, StandardCharsets.ISO_8859_1);
根据编码,单个字节数组可以表示多个不同的字符串,并且数组中的字节与编码无关,因此能够将编码作为参数传递给这个 function 是没有意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.