1. JNI一文详解
全篇内容详细介绍了JNI(java Native Interface)的使用方法,用于在Java代码中调用非Java代码,主要绕过Java的内存管理和解决性能问题。以下为详细步骤:
第一步:理解JNI基础。JNI是Java Native Interface的缩写,它允许Java代码调用本地代码。JNI提供了基础数据类型的对应,如八种基础类型和字符串类型。
第二步:开始学习JNI。首先使用C编写简单的示例,关键在于调用动态链接库(如.dll在Windows或.so在Unix系统)的代码(System.loadLibrary("hello");)。编译Java代码并生成头文件。头文件定义了函数,函数命名规则遵循Java包名和类名加上函数名,同时使用extern "C"来告知编译器遵循C的函数命名规则。C文件中定义函数实现。
第三步:将C文件替换为C++文件,继续编译和运行。
第四步:学习JNI基础类型和Java类型之间的转换。JNI提供了多种转换接口,以适应不同类型的数据交换。注意,jni本质上是一个C接口,它不传递对象。
第五步:传递基础类型、String类型和基础类型数组。基础类型不需要转换,而String类型需要在jni和c之间进行复杂的转换,通常使用jstring和char*之间进行转换。数组传递涉及内存分配、内容复制和接口调用。
第六步:获取Java类的成员变量、静态变量、成员方法和类静态方法。通过JNI获取类的引用,然后调用相应的方法。调用实例方法和静态方法遵循类似的步骤。
第七步:在native代码中调用Java的构造方法创建对象。使用NewObject()创建对象,然后返回到Java环境。
第八步:了解局部引用和全局引用。在JNI中管理引用非常重要,局部引用在方法结束时失效,而全局引用需要创建以保持引用的有效性。
第九步:了解JNI的常见错误,如找不到本地库的错误(SEVERE: java.lang.UnsatisfiedLinkError)。解决方案是添加本地库的路径到"java.library.path"。
总体而言,JNI提供了一种方法来集成本地代码到Java应用中,以提升性能或访问特定功能,但其使用需遵循特定的规则和最佳实践。
2. 什么叫接口文件
接口就是你要提供给用户的功能。用户需要什么就提供什么接口。比如用户需要发送文件,你就要提供发送文件的方法(接口)。