【问题标题】:Why use Printwriter over PrintStream in Java for outputting human readable text为什么在 Java 中使用 Printwriter 而不是 PrintStream 来输出人类可读的文本
【发布时间】:2022-01-12 22:38:35
【问题描述】:
java 文档说在处理文本时使用 Printwriter 而不是 Printstream,但为什么会这样呢?我知道 Printwriter 处理字符流,而 Printstream 处理字节流,但最终它们的两个字节。并且从 Java 1.5 开始,PrintStream 不再局限于使用平台默认编码;有接受字符集名称的构造函数。那么 Printwriter 相对于 Printstream 有什么好处呢?
【问题讨论】:
标签:
java
io
printwriter
printstream
【解决方案1】:
PrintStream 是古老的。首选PrintWriter。实际上,最好都不使用,因为这两个类都会默默地处理异常。
我建议使用由BufferedWriter 包裹的OutputStreamWriter。
PrintStream 不能使用默认字符集以外的字符编码。如果您需要将字符串编写为 UTF-8 字节并且默认 JVM 字符集是 Windows-1252(就像在 Windows 上运行 Java 时的情况一样),那么 PrintWriter 可以这样做,而 PrintStream 不能。我认为这是主要区别。
PrintWriter 不允许你写byte[],而PrintStream 可以。允许直接写入byte[] 会通过混合不应混合的字符编码来增加出错的可能性。
PrintWriter 允许您直接写char[],而PrintStream 不允许。
PrintWriter 允许您在不分配新字符串的情况下编写字符串切片。