【问题标题】:Why does PrintStream inherit from byte streams?为什么 PrintStream 继承自字节流?
【发布时间】:2025-11-25 02:45:01
【问题描述】:

据我所知java.ioist分为字节流和字符流。 字节流读写字节,字符流读写字符。

PrintStream 具有以下继承层次结构:

Object <- OutputStream <- FilterOutputStream <- PrintStream.

因此我决定PrintStream与读写字节有关。

但是如果这样写:

    PrintStream output = new PrintStream(System.out);

    output.print(true);
    output.print((int) 123);
    output.print((float) 123.456);

    output.printf(Locale.UK, "Text + data: %1$d", 123);

    ...

我在控制台中看到 字符。 这种情况让我很困惑。请澄清我的误解。 字节流字符流这两个术语究竟是什么意思?

【问题讨论】:

    标签: java io stream character bytestream


    【解决方案1】:

    PrintStream 类是由于历史原因而存在的语义异常。在 Java 设计者认识到1需要为字符流和字节流提供不同的“堆栈”之前,该类就存在于 Java 1.0 中。它代表了在 Java 中进行简单文本输出的“原始方式”……在 Java 1.1 中引入 Writer 及其子类型之前。

    所以事实上,字节流和字符流(可能)正是您认为的意思。无论如何,Java 教程中最好地描述了它们的含义:


    1 - 他们可能更早地意识到了这一需求,但有压倒一切的“商业原因”来快速发布 Java 1.0。

    【讨论】:

    • 我在测试中发现了它,我遇到了关于 System.setOut() 的问题,最终我应该知道正确答案的参数类型。我建议它是 Writer 因为我知道 System.out.println 写入字符但我的逻辑是错误的!
    最近更新 更多