提问人:Sudipta Mohapatra 提问时间:2/17/2023 更新时间:2/17/2023 访问量:52
如何知道何时使用 byteStream 读取数据,何时使用 charStream 从文件中读取数据?
How to know when to use byteStream for reading data and when to use charStream for reading data from a file?
问:
我正在尝试了解我是否需要从不同类型的文件(.properties 文件、json 文件、文本文件等)或从控制台读取数据,我应该使用哪个 java 类以及确切的原因。
有些类以字节(8 位)的形式读取数据,有些类以字符(16 位 unicode)的形式读取数据。那么,如何决定使用哪个类来读取数据呢?
在上面的示例代码中,我正在尝试读取一个 .properties 文件。那么,如何决定我是否需要使用 FileInputStream 或任何其他类来读取文件?
我试着在网上寻找答案,但我仍然不清楚。
答:
这取决于具体情况。
对于属性文件,有一个重载方法。您可以传递 an 或 .
在这里,最好使用选项(字节流),因为该函数会自行处理正确的字符集。如果您使用 a,则负责读取具有正确编码的文件。Properties.load()
InputStream
Reader
InputStream
load()
Reader
解析 XML 文件也是如此。编码是 XML 标头(或默认为 UTF-8)的一部分,因此让解析器读取和处理它是最佳选择。
对于 JSON,默认编码为 UTF-8。其他编码是可能的,但我不知道是否可以像在 XML 中一样在 JSON 文档中声明编码。
因此,对于其他文件类型,这取决于用例。如果您有一个编码为 UTF-8 的文本文件,并且想要按原样将其复制到另一个位置,则只需将该文件视为字节块即可。但是,如果您必须提取一些单词,则有必要将字节块解释为字符,因此您需要正确的字符编码(与 .Reader
InputStreamReader
有时,您可以通过 API 获得正确的编码,例如,如果您通过 HTTP 调用 REST 服务,则可以从 HTTP 标头中提取编码。否则,您只需要知道编码即可。
评论