用 JNI 进行 Java 编程(5)

守給你的承諾、 提交于 2019-12-01 02:02:02

结束语和参考资料

结束语

Java 本机接口是 Java 平台中一种设计良好和良好集成的 API。它被设计成用来使您能将本机代码合并到 Java 程序中,也为您提供了一种在用其它编程语言编写的程序中使用 Java 代码的方式。

使用 JNI 总会破坏 Java 代码的可移植性。当从 Java 程序调用本机方法时,需要为每个您打算运行程序的平台分发本机共享库文件。另一方面,从本机程序调用 Java 代码实际上可以改进应用程序的可移植性。

 

附录

附录 A:JNI 类型

JNI 使用几种映射到 Java 类型的本机定义的 C 类型。这些类型可以分成两类:原始类型和伪类(pseudo-classes)。在 C 中,伪类作为结构实现,而在 C++ 中它们是真正的类。

Java 原始类型直接映射到 C 依赖于平台的类型,如下所示:

C 类型 jarray 表示通用数组。在 C 中,所有的数组类型实际上只是 jobject 的同义类型。但是,在 C++ 中,所有的数组类型都继承了 jarrayjarray 又依次继承了 jobject。下列表显示了 Java 数组类型是如何映射到 JNI C 数组类型的。

这里是一棵对象树,它显示了 JNI 伪类是如何相关的。

附录 B:JNI 方法说明编码

用下表指定的编码将本机 Java 方法参数类型表示或转换成本机代码。

JNI 对象树

  • 类类型 L 表达式结尾的分号是类型表达式的终止符,而不是多个表达式之间的分隔符。

  • 必须用正斜杠(/)而不是点(.)来将包和类名称隔开。要指定数组类型,用左方括号([)。 例如,Java 方法:
    boolean print(String[] parms, int n)

    的转换说明如下:
    ([Ljava/lang/Sting;I)Z

 

参考资料

下载

文章和教程

  • 要了解更多关于用 C/C++ 语言编程和用 Java 语言编程之间的差异(从 C/C++ 程序员的角度),请参阅教程“ Introduction to Java for C/C++ programmers ”(developerWorks,1999 年 4 月)
  • 最近的一篇文章“Weighing in on Java native compilation”(developerWorks,2002 年 1 月)使用用来进行比较的基准测试程序从正反两方面研究了 Java 本机接口。
  • 了解更多关于 Java 本机接口的内容,包括 Java 2 SDK 中的 JNI 的增强
  • 要进一步学习 Java 编程,请参阅 developerWorks 上的 关于 Java 编程的教程列出的所有教程。
  • 在 IBM developerWorks 上的 Java 技术专区,关于 Java 编程的每个方面,您都可以找到数百篇文章。

推荐书籍

 

关于作者

Scott Stricker 是 IBM Global Services 下属的 Business Innovation Services 的企业应用程序开发人员。他的专长是面向对象技术,尤其是 Java 和 C++ 编程。

Scott 拥有美国辛辛那提大学计算机科学理学学士学位。他是“Sun 认证的 Java 2 程序员与开发者(Sun Certified Java 2 Programmer and Developer)”。 可通过 sstricke@us.ibm.com 联系 Scott。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!