Java:PrintStream和PrintWriter之间的区别

2022-08-31 08:22:34

和 有什么区别?他们有很多共同的方法,因此我经常将这两个类混合在一起。此外,我认为我们可以将它们用于完全相同的事情。但必须有区别,否则,将只有一个类。PrintStreamPrintWriter

我搜索了档案,但找不到这个问题。


答案 1

这听起来可能轻率,但打印到 ,并打印到 .好吧,我怀疑我会因为陈述显而易见的事情而得到任何分数。但还有更多。PrintStreamOutputStreamPrintWriterWriter

那么,an 和 a 有什么区别?两者都是流,主要区别在于 a 是字节流,而 a 是字符流。OutputStreamWriterOutputStreamWriter

如果 a 处理字节,那么 ?它使用默认平台编码将字符转换为字节。使用默认编码通常是一件坏事,因为在从一个平台移动到另一个平台时可能会导致错误,特别是如果您在一个平台上生成文件并在另一个平台上使用它。OutputStreamPrintStream.print(String)

使用 ,通常指定要使用的编码,从而避免任何平台依赖关系。Writer

为什么要在JDK中使用a,因为主要目的是编写字符而不是字节? 早于 JDK 1.1 引入读取器/编写器字符流。我想Sun会弃用,如果只是因为它被如此广泛使用。(毕竟,您不希望每个调用都生成已弃用的 API 警告!此外,将类型从 更改为 标准输出流会破坏现有应用程序。PrintStreamPrintStreamPrintStreamSystem.outPrintStreamPrintWriter


答案 2

从 JDK 1.4 开始,可以为 PrintStream 指定字符编码。因此,PrintStream 和 PrintWriter 之间的区别仅与自动刷新行为有关,并且 PrintStream 无法包装 Writer。


推荐