java-native-access (jna)
java开发中对效率要求比较高时,为提高效率,往往会采用 c\c++ 的方式进行交互,如:音视频开发中,通常使用 jni 的方式调用 c 接口,自己编写native方法。
jna 也是基于 jni 的技术的,只是封装了部分的操作,类似 golang 中的 cgo,目的是使调用c接口更加方便,不需要自己去编写native方法了。
新建java项目,初始化环境
mkdir java_jna/src/com/faceid/app -p
mkdir java_jna/lib -p
整体项目结构如下:
├── env.sh
├── lib
│ └── jna-5.7.0.jar
└── src
├── com
│ └── faceid
│ └── app
│ ├── App.class
│ ├── App.java
│ ├── FaceId.class
│ └── test.jpg
├── hs_err_pid8310.log
下载安装JNA
cd java_jna/lib
wget https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.7.0/jna-5.7.0.jar
编写java代码
pwd
/home/unknow/java_jna/src/com/faceid/app
touch App.java
- App.java 文件
// App.java
package com.faceid.app;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
interface FaceId extends Library{
public static FaceId INSTANCE = (FaceId)Native.loadLibrary("faceid", FaceId.class);
void init_model();
Pointer get_feature_from(String filename);
}
public class App {