gqq*_*gqq 6 java java-native-interface
我是Java的新手,并被告知要使用Java Native Interface来运行我在C中编写的一些代码.
现在,这可能是一个愚蠢的问题,但JNI的重点是什么?我不能简单地从Java UI程序执行我的进程并让它的stdout进行解析吗?
另外,我已经读过使用JNI可能会导致安全问题.这些问题直接取决于调用代码的质量吗?或者这是更深层次的东西?
谢谢.
JNI有什么意义?
它使您能够在同一进程中混合使用C和Java代码.
我不能简单地从Java UI程序执行我的进程并让它的stdout进行解析吗?
使用JNI可以实现的许多事情也可以通过使用进程间通信(IPC)来实现.但是,您必须将所有输入数据发送到另一个进程,然后将所有结果发回.这可能相当昂贵,这使得IPC在许多可以使用JNI的情况下不切实际(例如,包装现有的C库).
另外,我已经读过使用JNI可能会导致安全问题.这些问题直接取决于调用代码的质量吗?或者这是更深层次的东西?
这里的要点是JVM做了很多工作来确保抛出任何Java代码,缓冲区溢出,堆栈粉碎攻击等等都不会发生.例如,它对所有数组访问执行边界检查(C不执行).
另一方面,JNI代码是JVM的黑盒子.如果C代码出现问题(例如缓冲区溢出),则所有投注均关闭.
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |