谁在java中实现了OS接口?

Ske*_*een 7 java java-native-interface standards interface standard-library

我的问题主要是关于标准,但是关于具体实现如何处理该问题的输入也是受欢迎的.所以没有进一步的重做,我的问题是;

  • 谁负责Java中的操作系统接口?
    • Java虚拟机?
    • 还是Java类库?

这通常是如何通过Java Native Interface实现的?

例; 我正在使用java.io.FileReader读取文件.当调用read这个对象时,JVM显然会在JCL中的正确类文件中调用这个函数,但是这个代码到底依赖于JVM来调用,例如posix read函数? - 或者类文件是否会通过使用JNI自行完成?(假设read必须完成,即文件不在缓存/内存中)

Jan*_*aus 1

我希望一些真正的专业人士能够回答这个问题,最好是真正从事过 JVM/JDK 工作的人。由于到目前为止,他们似乎都不在线(或者就此而言看过你的问题),我将尝试解释这一点。

Java 类库类(在rt.jarJRE/JDK 文件中找到)实际上是纯 java。不过,它们确实包含大量 JNI 调用。例如,如果您查看源代码FileInputStream,您会发现如下内容:

private native int readBytes(byte b[], int off, int len)
    throws IOException;

public int read(byte b[])
    throws IOException
{
    return readBytes(b, 0, b.length);
}
Run Code Online (Sandbox Code Playgroud)

所以您的猜测是正确的:JCL 确实广泛使用了 JNI。但谁提供这些本机实现呢?简单:JVM。这就是各个部分如何组合在一起的。