JNI——实现Java与C的协同工作(五)

第五部分 JNI的进化——JNA


JNA 的前世今生


1. Wikipedia(en) 的介绍

    Java Native Access provides Java programs easy access to nativeshared libraries without using the Java Native Interface. JNA's design aims to provide native access in a natural way with a minimum of effort. No boilerplate or generated glue code is required.

    PS:鉴于官方的说明比较啰嗦,就没有引用。

2.个人理解

    简单来说,JNA 已经帮我们搞定了常用 C 中函数(甚至还有其他语言)的 JNI 链接,并封装成JAR形式的包供我们直接调用。可以说,这对于一般应用来讲是非常方便的,当然,对于那些需要我们自定义的底层函数还是要老老实实地走 JNI 的流程。


JNA 的使用


1. 获取 JNA

官方网站(GitHub):https://github.com/twall/jna

2. 将 JNA 的 JAR 包导入工程


3. 编写程序 HelloWorld.java (来自 JNA 的示例)

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Simple example of JNA interface mapping and usage. */
public class HelloWorld {

    // This is the standard, stable way of mapping, which supports extensive
    // customization and mapping of Java to native types.

    public interface CLibrary extends Library { // 这是JNA已经封装好的方法,可实现C中的printf
        CLibrary INSTANCE = (CLibrary)
            Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
                               CLibrary.class);

        void printf(String format, Object... args);
    }

    public static void main(String[] args) {
        CLibrary.INSTANCE.printf("Welcome to JNA world!\n"); // 相当于C中的printf函数
        for (int i=0;i < args.length;i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }
    }
}

4. 编译运行

结果如下: 

Welcome to JNA world!


更多 JNA 使用说明


参考官方文档:http://twall.github.io/jna/4.0/javadoc

JNI 与 JNA 性能比较

参考这篇文章:http://blog.csdn.net/drifterj/article/details/7841810

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值