Java - System.out的PrintStream流是什么?

时间:2016-03-17 13:31:57

标签: java

我想了解java流。

代码:

System.out.println(System.out.getClass().getCanonicalName())

输出

java.io.PrintStream

据我所知,PrintStream是另一个流的包装器,用于添加格式化功能。但我无法理解PrintStream包装的流类是什么?这个控制台?以及如何检查它 - 从PrintStream API我找不到任何合适的方法。

5 个答案:

答案 0 :(得分:4)

这是拥有API的重点。在某种程度上,实际的"流"变得依赖OS和平台。但是Java已经建立起来,所以你不必担心这些事情

答案 1 :(得分:3)

我推荐以下博文:How System.out.println() really works

如果您查看java.lang.System的Open JDK代码,您会在第100行看到它是使用nullPrintStream()初始化的,而initializeSystemClass()函数是在第1095行,它会设置为包裹fdOutfdOut只是标准输出流的句柄,请参阅第85行的java.io.FileDescriptor代码。

所以没有太大的魔力。

答案 2 :(得分:0)

PrintStream使用BufferedWriter textOutOutputStreamWriter charOut。要打印一行,执行以下代码:

private void println() {
    try {
        synchronized (this) {
            if (out == null)
                throw new IOException("Stream closed");
            textOut.newLine();
            textOut.flushBuffer();
            charOut.flushBuffer();
            if (autoFlush)
                out.flush();
        }
    }
    catch (InterruptedIOException x) {
        Thread.currentThread().interrupt();
    }
    catch (IOException x) {
        trouble = true;
    }
}

其中out是OutputStream

答案 3 :(得分:0)

最终所有流都是基于字符/字节的流。像Print Writer这样的东西就是包装器,这样你就可以根据自己喜欢的其他数据类型做事,而不是每次都将数据转换成字符/字节类型。

答案 4 :(得分:0)

它包装一个绑定到控制台输出的FileOutputStream。