gpt4 book ai didi

java - OutputStreamWriter 与 FileWriter

转载 作者:IT老高 更新时间:2023-10-28 20:31:40 28 4
gpt4 key购买 nike

我不明白这两个类之间的区别。你什么时候用一个而不是一个?我知道 FileWriter 可以将字符输出到文件,但据我所知,OutputStreamWriter 也可以。这是我测试的一些代码,它们似乎工作相同,我没有添加异常处理的东西,而是假设它在那里。

FileWriter writer = new FileWriter("C:\\Users\\owner\\Desktop\\demo.txt");
writer.write("hello");
writer.close();

我也试过这段代码:

File file = new File("C:\\Users\\owner\\Desktop\\demo.txt");
os = new OutputStreamWriter(new FileOutputStream(file));
os.write("hello");
os.close();

这两种方法对我来说似乎都一样。唯一发生奇怪的事情是当我尝试在 write() 方法中放入一个 int 值。对于 FileWriter 示例,我的 demo.txt 完全是空的。对于 OutputStreamWriter 示例,我的文本文件中有一些奇怪的符号。我正在阅读一本 java 书,我对 OutputStreamWriter 的唯一解释是它“将字符流转换为字节流”,所以我不应该在第二个示例中看到我的文本文件中的一些字节吗?

我们将不胜感激。

最佳答案

XXXInputStream 和 XXXOutputStream(其中 XXX 不同,有很多选项)处理 8 位字节。例如 OutputStream.write(byte[] c);

XXXWriter 或 XXXReader 处理 16 位字符。例如,Reader.read(char[] cbuf).

OutputStreamWriter 将 OutputStream 转换为 Writer。您可能已经猜到了,InputStreamReader 从 InputStream 转换为 Reader。我不知道有任何相反的类,即将 Reader 转换为 InputStream。

FileWriter 是一个与文件对话的 Writer。由于 Java 字符串在内部使用字符(16 位,因此它们可以处理 Unicode),因此 FileWriter 是与 Unicode 字符串一起使用的自然类。

FileOutputStream 是用于将字节写入文件的 OutputStream。 OutputStreams 不接受字符(或字符串)。通过将它包装在一个 OutputStreamWriter 中,您现在有了一个接受字符串的 Writer。

现在,真正的问题是,您什么时候使用 Reader/Writer,什么时候使用 Stream?我已经使用 Java 多年,有时我也会感到困惑。我认为以下是正确的:

便捷指南 - 如何决定使用哪个:

  1. 如果您要处理二进制数据(例如图像),请使用 Streams。
  2. 如果您使用的是非 ASCII Unicode 字符,例如中文,用读者/作家。
  3. 如果您使用的是普通 ASCII 文本(传统的 0-127 字符),您可以(通常)使用其中任何一种。

其他一些链接:

inputstream and reader in Java IO

InputStream vs InputStreamReader

关于java - OutputStreamWriter 与 FileWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11371154/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com