据我所知java.io
列表分为字节流和字符流。用于读写字节的字节流和用于读写字符的字符流。
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);
...
我在控制台上看到字符。这种情况把我弄糊涂了。请澄清我的误解。术语字节流和字符流的真正含义是什么?
PrintStream
类是由于历史原因而存在的语义异常。在Java设计者认识到1需要为字符流和字节流提供不同的"堆栈"之前,这个类就存在于Java 1.0中。它代表了在Java中进行简单文本输出的"原始方式"…在Java 1.1中引入Writer
及其子类型之前。
所以事实上,字节流和字符流(很可能)的意思就是它们看起来的意思。无论如何,它们的含义在Java教程中有最好的描述:
- 字节流。
- 字符流。
1 -他们可能更早意识到这一需求,但有压倒一切的"商业原因"让Java 1.0尽快发布。