0

所以根据我的理解,PrintStream 必须使用某种 Java 本机接口与操作系统进行通信,以便它可以写入标准输出,或者 java 是否使用其他技术?我想知道 JVM 的架构让我很感兴趣。了解它的工作方式和系统本身的架构对我来说非常有趣。

4

2 回答 2

1

OpenJDK 中的标准输出流是一个PrintStreamwhich wraps BufferedOutputStream, which wraps FileOutputStreamwhichFileDescriptor. 有一些特殊FileDescriptor对象对应于标准输入、标准输出和标准错误(特别是,请参阅 参考资料FileDescriptor.out)。它们有众所周知的数字(例如,stdout 文件描述符1)。所以真正的逻辑在FileOutputStream.writeBytes当然是本机的方法内部。在 Java 方面,我们有缓冲、同步和将字符转换为字节的功能。低级的东西(将字节直接写入文件描述符)由本机代码完成。

于 2015-11-23T04:35:14.323 回答
0

JavaSystem.out PrintStream写入stdout。维基百科将标准输出描述为,

标准输出的文件描述符是 1(一);POSIX<unistd.h>定义是STDOUT_FILENO;对应的<stdio.h>变量是FILE* stdout;同样,<iostream>变量为std::cout

虽然 Javadoc forSystem.out说(部分)

“标准”输出流。此流已经打开并准备好接受输出数据。

于 2015-11-22T23:49:52.997 回答