Ske*_*een 7 java java-native-interface standards interface standard-library
我的问题主要是关于标准,但是关于具体实现如何处理该问题的输入也是受欢迎的.所以没有进一步的重做,我的问题是;
这通常是如何通过Java Native Interface实现的?
例; 我正在使用java.io.FileReader读取文件.当调用read
这个对象时,JVM显然会在JCL中的正确类文件中调用这个函数,但是这个代码到底依赖于JVM来调用,例如posix read
函数? - 或者类文件是否会通过使用JNI自行完成?(假设read
必须完成,即文件不在缓存/内存中)
我希望一些真正的专业人士能够回答这个问题,最好是真正从事过 JVM/JDK 工作的人。由于到目前为止,他们似乎都不在线(或者就此而言看过你的问题),我将尝试解释这一点。
Java 类库类(在rt.jar
JRE/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。这就是各个部分如何组合在一起的。