java如何在屏幕上实际打印

时间:2015-02-01 20:37:19

标签: java printing jvm

我是java的新手,从oracle的官方java文档中学习java。在java文档提供的大多数程序示例中,system.out.println(...)语句用于在屏幕上打印文本或消息。还有一些其他方法,如print(), printf() etc,用于在屏幕上书写。

我想知道这些方法实际上是如何工作的。我看一下这些方法的来源并深入研究,我发现最终write(char cbuf[], int off, int len)方法在每个打印方法中都被调用(直接或间接),这个方法是抽象的。

那么JVM如何在屏幕上打印/写入内容。据我所知,这是JVM的内部工作。 JVM搜索显示窗口并调用OS的系统命令,例如linux和Windows OS中的echo

我是对的,如果没有,那么解释这些方法的工作并纠正我。

1 个答案:

答案 0 :(得分: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:1141FileOutputStream集的引用,

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

FileDescriptor.out

  

处理标准输出流。通常,不直接使用此文件描述符,而是通过称为System.out的输出流。

那么PrintStream如何处理像print()这样的方法? (你可能会看到我要去的地方。

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

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

write()依次写入传递的值并刷新传递给PrintStream()的输出流。

其余的实现位是本机方法,根据定义,它们根据平台和程序的调用而变化。它们可以是从控制台屏幕到打印机的任何东西,也可以是将输出燃烧到地球表面的轨道激光。

除了幽默,我希望这有助于理解。

相关问题