结束语和参考资料
结束语
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++ 中,所有的数组类型都继承了 jarray
,jarray
又依次继承了 jobject
。下列表显示了 Java 数组类型是如何映射到 JNI C 数组类型的。
这里是一棵对象树,它显示了 JNI 伪类是如何相关的。
附录 B:JNI 方法说明编码
用下表指定的编码将本机 Java 方法参数类型表示或转换成本机代码。
注:
- 类类型 L 表达式结尾的分号是类型表达式的终止符,而不是多个表达式之间的分隔符。
- 必须用正斜杠(/)而不是点(.)来将包和类名称隔开。要指定数组类型,用左方括号([)。 例如,Java 方法:
boolean print(String[] parms, int n)
的转换说明如下:([Ljava/lang/Sting;I)Z
参考资料
下载
- 请下载本教程的完整源代码文件 jni-source.zip。
- 请下载 Java 2 平台,标准版(Java 2 platform,Standard Edition),版本 1.4。
- 如果您是 Windows 用户,可能喜欢用 Visual C++ 来编译 C/C++ 代码。
- 如果您是 UNIX 用户,可能喜欢用
cc
来编译 C/C++ 代码。当然,GCC 是一个同样可行的开放源码编译器。 - IBM 的 VisualAge for Java 是一个完整的 Java 开发软件包,它包含 C/C++ 编译器。
- 请使用 developerWorks 上的 IBM developer kits for Java technology 中的清单来继续深入探讨可用的选项。
文章和教程
- 要了解更多关于用 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 编程的每个方面,您都可以找到数百篇文章。
推荐书籍
- 要了解更多关于用 C++ 编程的内容,可以从 Bjarne Stroustrup 的 The C++ Programming Language,第三版(Addison-Wesley,1996 年)开始。
- 另一本出色的参考书籍是 Kris Jamsa 和 Lars Klander 的 Jamsa's C/C++ Programmer's Bible(Jamsa Press,1998 年)。
- 要更多了解面向对象方法,请参阅 Cay S. Horstmann 的 Mastering Object-Oriented Design in C++(John Wiley & Sons Inc.,1995 年)。
- Andrew C. Staugaard, Jr. 编写的 Structured and Object-Oriented Techniques:An Introduction using C++(Prentice Hall,1997 年)。
- Ken Arnold 和 James Gosling 编写的 The Java Programming Language:第三版(Addison-Wesley,2000 年)。
- 阅读 Sheng Liang 的 Java Native Interface:Programmer's Guide and Specification(Sun Microsystems Press,1999 年)了解更多 Java 本机接口的内容。
- 还可以参阅 Rob Gordon 的 Essential JNI:Java Native Interface(Prentice Hall,1998 年)。
- David Flanagan 的 Java in a Nutshell,第三版是 Java 程序员不可或缺的读物(O'Reilly,1999 年)。
- 还可以参阅 Cay S. Horstmann 和 Gary Cornell 的 Core Java 2 系列(Sun Microsystems Press,2000 年)的前两卷。
- Philip Heller 和 Simon Roberts 编写的 Java 2 Developer's Handbook(Sybex,1999 年)是一本优秀的参考资料。
- 要了解更多关于 Java 平台的安全性模型的内容,请参阅 Scott Oaks 的Java Security,第二版(O'Reilly,2001 年)。
- 要深入研究 Java 数据结构和算法,请参阅 Robert Lafore 的 Data Structures & Algorithms in Java(Waite Group Press,1998 年)。
- 缺了 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 的 Design Patterns: Elements of Reusable Object-Oriented Software(Addison-Wesley Professional Computing Series,1995 年),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。
来源:oschina
链接:https://my.oschina.net/u/172402/blog/82068