Java:PrintStream与PrintWriter的区别

PrintStreamPrintWriter什么区别? 他们有很多共同的方法,我经常把这两个类混合起来。 而且,我认为我们可以将它们用于完全相同的事情。 但是必须有所不同,否则,只会有一个阶级。

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

这可能听起来不妙,但PrintStream打印到OutputStreamPrintWriter打印到Writer 。 好吧,我怀疑我会得到任何明显的说明。 但还有更多。

那么, OutputStreamWriter什么区别呢? 两者都是stream,主要区别在于OutputStream是字节stream,而Writer是字符stream。

如果OutputStream处理字节, PrintStream.print(String)呢? 它使用默认平台编码将字符转换为字节。 使用默认编码通常是一件坏事,因为从一个平台移动到另一个平台会导致错误,尤其是当您在一个平台上生成文件并在另一个平台上使用文件时。

使用Writer ,您通常会指定要使用的编码,避免任何平台依赖性。

为什么还要在JDK中使用PrintStream ,因为主要目的是写字符,而不是字节? 当引入Reader / Writer字符stream时, PrintStream早于JDK 1.1。 我想如果仅仅因为它被广泛使用的事实,Sun将会弃用PrintStream 。 (毕竟,你不希望每次调用System.out来生成废弃的api警告!另外,将标准输出stream上的PrintStreamtypes更改为PrintWriter会破坏现有的应用程序。)

使用PrintStream您可以坚持使用平台的默认编码。

 PrintStream stream = new PrintStream(output); 

使用PrintWriter您可以使用特定的编码传递OutputStreamWriter

 PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8")); 

好处是,你可以控制字符编码的字符应该被写入,使得它们最终不会最终成为mojibake 。

从JDK 1.4开始,可以指定PrintStream的字符编码。 因此,PrintStream和PrintWriter之间的区别仅仅是自动刷新行为,PrintStream不能包装Writer。

像PrintWriter的作家是文本输出,stream是二进制输出。 作家为你处理字符集的东西。 stream并不是因为假设你不想要这样的转换,这会弄乱你的二进制数据,而且如果你这样做,会使用一个作者。

您可以将原始字节写入stream而不写入写入器。 PrintWriter javadoc列出了其他的差异(最重要的是,能够设置一个stream的编码,所以它可以解释我会说的原始字节)。

Printwriter是printstream的增强版。

IE打印stream为特定的目的。