Java:PrintStream与PrintWriter的区别
PrintStream
与PrintWriter
什么区别? 他们有很多共同的方法,我经常把这两个类混合起来。 而且,我认为我们可以将它们用于完全相同的事情。 但是必须有所不同,否则,只会有一个阶级。
我搜查了档案,但找不到这个问题。
这可能听起来不妙,但PrintStream
打印到OutputStream
, PrintWriter
打印到Writer
。 好吧,我怀疑我会得到任何明显的说明。 但还有更多。
那么, OutputStream
和Writer
什么区别呢? 两者都是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上的PrintStream
types更改为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为特定的目的。