PrintStream
和 和有什么不一样PrintWriter
?它们有许多共同的方法,因此我经常将这两个类混合在一起。此外,我认为我们可以将它们用于完全相同的事情。但必须有区别,否则,将只有一个类。
我已经搜索了档案,但找不到这个问题。
PrintStream
和 和有什么不一样PrintWriter
?它们有许多共同的方法,因此我经常将这两个类混合在一起。此外,我认为我们可以将它们用于完全相同的事情。但必须有区别,否则,将只有一个类。
我已经搜索了档案,但找不到这个问题。
这可能听起来很轻率,但会PrintStream
打印到OutputStream
, 并PrintWriter
打印到Writer
. 好的,我怀疑我会因为陈述显而易见的事情而得到任何积分。但还有更多。
OutputStream
那么,an和 a 有什么区别Writer
呢?两者都是流,主要区别在于 aOutputStream
是字节流,而 aWriter
是字符流。
如果 anOutputStream
处理字节,那PrintStream.print(String)
呢?它使用默认平台编码将字符转换为字节。使用默认编码通常是一件坏事,因为当从一个平台移动到另一个平台时,它可能会导致错误,尤其是当您在一个平台上生成文件并在另一个平台上使用它时。
使用 a Writer
,您通常指定要使用的编码,避免任何平台依赖性。
PrintStream
既然主要目的是写字符而不是字节,为什么还要在 JDK 中使用 a呢?PrintStream
在引入 Reader/Writer 字符流时早于 JDK 1.1。PrintStream
我想如果仅仅是因为它被广泛使用,Sun 就会弃用它。(毕竟,您不希望每次调用都System.out
生成已弃用的 API 警告!此外,将标准输出流上的类型从 更改为PrintStream
会PrintWriter
破坏现有的应用程序。)
从 JDK 1.4 开始,可以为 PrintStream 指定字符编码。因此,PrintStream 和 PrintWriter 之间的区别仅在于自动刷新行为,并且 PrintStream 不能包装 Writer。
像 PrintWriter 这样的编写器用于文本输出,流用于二进制输出。作者为您处理字符集。流不这样做是因为假设您不想要那种转换,这会弄乱您的二进制数据,并且如果您这样做了就会使用编写器。
您可以将原始字节写入 Stream 而不是写入器。PrintWriter javadoc 列出了其他差异(最重要的是,能够在流上设置编码,以便它可以解释我所说的原始字节)。
来自Horstmann的核心 java
Java 老手可能想知道 PrintStream 类和 System.out 发生了什么。在 Java 1.0 中,PrintStream 类通过删除顶部字节简单地将所有 Unicode 字符截断为 ASCII 字符。(当时,Unicode 仍然是 16 位编码。)显然,这不是一种干净或可移植的方法,随着 Java 1.1 中读取器和写入器的引入,它得到了修复。为了与现有代码兼容,System.in、System.out 和 System.err 仍然是输入/输出流,而不是读取器和写入器。但是现在 PrintStream 类在内部将 Unicode 字符转换为默认主机编码,方法与 PrintWriter 相同。当您使用 print 和 println 方法时,PrintStream 类型的对象的行为与打印编写器完全相同,
Printwriter 是对 printstream 的增强。
用于特定目的的 IE 打印流。