如何知道何时使用 byteStream 读取数据,何时使用 charStream 从文件中读取数据?

How to know when to use byteStream for reading data and when to use charStream for reading data from a file?

提问人:Sudipta Mohapatra 提问时间:2/17/2023 更新时间:2/17/2023 访问量:52

问:

我正在尝试了解我是否需要从不同类型的文件(.properties 文件、json 文件、文本文件等)或从控制台读取数据,我应该使用哪个 java 类以及确切的原因。

有些类以字节(8 位)的形式读取数据,有些类以字符(16 位 unicode)的形式读取数据。那么,如何决定使用哪个类来读取数据呢?

在此处输入图像描述

在上面的示例代码中,我正在尝试读取一个 .properties 文件。那么,如何决定我是否需要使用 FileInputStream 或任何其他类来读取文件?

我试着在网上寻找答案,但我仍然不清楚。

Java InputStream 缓冲读取 器文件InputStream 字节流

评论

1赞 vanje 2/17/2023
请将您的代码发布为文本,而不是图像。
0赞 Mark Rotteveel 2/17/2023
基本上,如果它是字符数据,则使用 Reader,如果是二进制数据,则使用 InputStream,否则您可以查看特定类的 API 以获取指导(例如,有时您可以提供 InputStream + Charset,或者您可以提供 Reader,在这种情况下,您可以根据可用的内容来决定), 但这不是通常可以回答的问题。
0赞 kerbermeister 2/18/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。

答:

1赞 vanje 2/17/2023 #1

这取决于具体情况。

对于属性文件,有一个重载方法。您可以传递 an 或 . 在这里,最好使用选项(字节流),因为该函数会自行处理正确的字符集。如果您使用 a,则负责读取具有正确编码的文件。Properties.load()InputStreamReaderInputStreamload()Reader

解析 XML 文件也是如此。编码是 XML 标头(或默认为 UTF-8)的一部分,因此让解析器读取和处理它是最佳选择。

对于 JSON,默认编码为 UTF-8。其他编码是可能的,但我不知道是否可以像在 XML 中一样在 JSON 文档中声明编码。

因此,对于其他文件类型,这取决于用例。如果您有一个编码为 UTF-8 的文本文件,并且想要按原样将其复制到另一个位置,则只需将该文件视为字节块即可。但是,如果您必须提取一些单词,则有必要将字节块解释为字符,因此您需要正确的字符编码(与 .ReaderInputStreamReader

有时,您可以通过 API 获得正确的编码,例如,如果您通过 HTTP 调用 REST 服务,则可以从 HTTP 标头中提取编码。否则,您只需要知道编码即可。