I want to understand java streams.
The code :
System.out.println(System.out.getClass().getCanonicalName())
输出
java.io.PrintStream
据我所知,PrintStream是另一个流的包装器,用于添加格式化功能。但我不明白被PrintStream包装的流类是什么?这是控制台吗?如何检查它-从PrintStream API中我没有找到任何合适的方法。
I want to understand java streams.
The code :
System.out.println(System.out.getClass().getCanonicalName())
输出
java.io.PrintStream
据我所知,PrintStream是另一个流的包装器,用于添加格式化功能。但我不明白被PrintStream包装的流类是什么?这是控制台吗?如何检查它-从PrintStream API中我没有找到任何合适的方法。
这就是拥有API的意义。在某些层面上,实际的“流”会变得与操作系统和平台有关。但是,Java被设置为您不必担心这些事情。
nullPrintStream()
,并且在第1095行的 initializeSystemClass()
函数中,它被设置为封装了 fdOut
的内容。而 fdOut
只是标准输出流的句柄,请参见java.io.FileDescriptor 在第85行的代码。PrintStream
使用一个 BufferedWriter textOut
和一个 OutputStreamWriter 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
。
它包装了一个与控制台输出相关联的FileOutputStream。