有什么区别 PrintStreamPrintWriter?它们有许多共同的方法,因此我经常混淆这两个类。此外,我认为我们可以将它们用于完全相同的事情。但必须有区别,否则就只有一个班级了。

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

有帮助吗?

解决方案

这听起来轻率,但PrintStream打印到一个OutputStream,和PrintWriter打印到Writer。好吧,我怀疑我会得到任何点说明明显。但还有更多。

那么,是什么样的OutputStreamWriter之间的区别? 两者都是流,与主要区别在于一个OutputStream是一个字节流而Writer是字符流。

如果用字节,那OutputStreamPrintStream.print(String)交易?它可以转换字符使用默认的平台编码字节。使用默认的编码一般是一件坏事,因为它可以从一个平台迁移到另一个时导致的错误,特别是如果你生成一个平台的文件和使用它的另一个。

通过一个Writer时,通常指定要使用的编码,避免任何平台的依赖关系。

何必具有在JDK一个PrintStream,由于主要目的是写字符,而不是字节? PrintStream早于JDK 1.1时被引入读/写字符流。我想象太阳会弃用PrintStream如果只有一个事实,它是如此广泛的应用。 (毕竟,你不希望每次调用System.out产生弃用的API警告!而且,改变从PrintStream类型在标准输出流将会破坏现有的应用程序PrintWriter。)

其他提示

随着 PrintStream 您必须使用平台的默认编码。

PrintStream stream = new PrintStream(output);

随着 PrintWriter 但是你可以通过 OutputStreamWriter 具有特定的编码。

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

好处是,您可以控制应该写入的字符编码,这样它们最终不会成为 莫吉巴克.

由于JDK 1.4有可能指定一个PrintStream的字符编码。因此,为PrintStream和PrintWriter的之间的差异只有约自动冲洗行为和一个PrintStream不能完成一个Writer。

像的PrintWriter作家是文本输出,流是二进制输出。作家处理字符集的东西给你。因为它假设你不希望那种转换,这将弄乱你的二进制数据,并会如果你没有使用一个作家流不。

可以写入流的原始字节,而不是作家。该 PrintWriter的 javadoc中列出了其他差异(最重要的是,能够设置上的流的编码,因此它可以解释的原始字节我说)。

核心Java 通过HORSTMANN

  

Java的退伍军人可能不知道发生了什么给的PrintStream类和到System.out。在Java   1.0时,为PrintStream类简单地丢弃截断所有Unicode字符转换为ASCII字符   最高字节。 (此时,Unicode的仍然是一个16位的编码。)很明显,这不是一个干净或   便携式的做法,它被固定在Java 1.1中引入的读者和作者。对于   与现有代码兼容,System.in下,System.out,和System.err仍然输入/输出   流,无以读者和作家。但现在的PrintStream类内部的Unicode转换   字符以同样的方式做的PrintWriter编码默认主机。类型的对象   PrintStream的行为完全一样,当您使用的打印和println方法打印的作家,但不像   打印作家它们允许你与写入(int)和写(字节[])方法输出的原始字节。

的PrintWriter是PrintStream的增强。

即。 PrintStream的为特定目的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top