Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用内置java本机方法_Java_Jvm_Java Native Interface_Native - Fatal编程技术网

调用内置java本机方法

调用内置java本机方法,java,jvm,java-native-interface,native,Java,Jvm,Java Native Interface,Native,是否可以调用JVM的内置本机代码,即java.lang和java.io中的各个类调用的代码?换句话说,您能否绕过内置JavaAPI来访问各种系统级调用,例如文件系统访问?我知道我可以通过构建自己的本机代码库并通过JNI调用它来做到这一点,但对于已经内置到JVM中的功能来说,不需要额外的本机库将是一种优雅的做法。不,你不能。它是故意这样设计的;如果可以,您将覆盖API合同 在任何情况下,标准库包装器代码都是非常微小的,对于JIT编译器,您不应该注意到任何速度影响 此外,这些方法的实现不属于API规

是否可以调用JVM的内置本机代码,即java.lang和java.io中的各个类调用的代码?换句话说,您能否绕过内置JavaAPI来访问各种系统级调用,例如文件系统访问?我知道我可以通过构建自己的本机代码库并通过JNI调用它来做到这一点,但对于已经内置到JVM中的功能来说,不需要额外的本机库将是一种优雅的做法。

不,你不能。它是故意这样设计的;如果可以,您将覆盖API合同

在任何情况下,标准库包装器代码都是非常微小的,对于JIT编译器,您不应该注意到任何速度影响


此外,这些方法的实现不属于API规范的一部分。一个Java实现的“本机”不一定是另一个实现的。

不,你不能。它是故意这样设计的;如果可以,您将覆盖API合同

在任何情况下,标准库包装器代码都是非常微小的,对于JIT编译器,您不应该注意到任何速度影响


此外,这些方法的实现不属于API规范的一部分。一个Java实现的“本机”不一定是另一个实现的。

如果您希望本机IO使用NIO类。

如果您希望本机IO使用NIO类。

当然,您可以,使用反射调用提供可信代码的方法。但是,非公共API很容易在更新和实现之间发生变化,因此毫无意义,也绝对不优雅。

当然,如果代码可信,您可以使用反射来调用方法。然而,非公共API很容易在更新和实现之间发生变化,因此毫无意义,绝对不优雅。

据我所知,NIO类指的是“新IO”,而不是“本机IO”。它们仍然是底层本机实现的Java包装器。它们仍然是底层本机实现的Java包装器。我并不是真的被速度所驱动,这里更大的动机是以比默认JavaAPI提供的更统一的方式抽象某些基本功能。Sun似乎意识到了其中的一些缺点,因此从java.io到java.nio再到java.nio2的迭代令人困惑!你对Java的API的批评是很公正的!我建议您定义自己的API,并在后台使用标准库。这足以让你的代码免受恐怖的攻击;剩下的(平台行为、速度)不会是问题。感谢您的澄清。我并不是真的被速度所驱动,这里更大的动机是以比默认JavaAPI提供的更统一的方式抽象某些基本功能。Sun似乎意识到了其中的一些缺点,因此从java.io到java.nio再到java.nio2的迭代令人困惑!你对Java的API的批评是很公正的!我建议您定义自己的API,并在后台使用标准库。这足以让你的代码免受恐怖的攻击;剩下的(平台行为、速度)不会成为问题。你可以,但你不需要。你绕过他们的目的是什么?你可以,但你不需要。你绕过他们的目的是什么?