Java如何在屏幕上打印输出

3
我是新手Java学习者,正在从Oracle的官方Java文档中学习Java。在Java文档提供的大多数程序示例中,system.out.println(...)语句用于在屏幕上打印文本或消息。还有一些其他方法,如print(),printf()等可用于在屏幕上写入内容。
我想知道这些方法实际上是如何工作的。我查看了这些方法的源代码并深入研究后发现,在每个打印方法(直接或间接地)中最终都会调用write(char cbuf [],int off,int len)方法,而此方法是抽象的。
那么JVM如何在屏幕上打印/写入内容呢? 我认为这是JVM的内部工作。 JVM搜索显示窗口并调用操作系统的系统命令,例如Linux和Windows OS中的echo
我的理解正确吗?如果不是,请解释这些方法的工作原理并纠正我。

你的想法是正确的。最终调用操作系统例程将内容写入屏幕的是你的代码,而不是JVM。 - Gilbert Le Blanc
1个回答

3

查看OpenJDK的源代码,有一个方法在java.lang.System:254,该方法似乎设置了System.out PrintStream的值,在java.lang.System:1144后被调用。

 254:  private static native void  [More ...] setOut0(PrintStream out);

1144:  setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));

fdOut 是对 java.lang.System:1141 设置为 FileOutputStream 的引用。

1141:  FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);

FileDescriptor.out是标准输出流的句柄。通常情况下,不直接使用此文件描述符,而是通过称为System.out的输出流来使用。

那么PrintStream如何处理print()等方法呢?(您可能已经看到我要去哪里了。

java.io.PrintStream:582-584处,有print(char c)方法。

 582:  public void print(char c) {
 583:      write(String.valueOf(c));
 584:  }

write()函数用来写入传递的值,并刷新传递给PrintStream()的输出流。

其余的实现细节是本地方法,根据平台和程序的调用而变化。它们可以是从控制台屏幕到打印机,或者是将输出烧到地球表面的轨道激光等任何形式。

开玩笑了,希望这有助于理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接