文档详情

JNI-API完全手册(补足六个汉字).doc

发布:2018-12-25约5.68万字共75页下载文档
文本预览下载声明
1 - 简介 本章介绍 Java 本地接口(Java Native Interface,JNI)。JNI 是本地编程接口。它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行互操作。 JNI 最重要的好处是它没有对底层 Java 虚拟机的实现施加任何限制。因此,Java 虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对 JNI 的支持。程序员只需编写一种版本的本地应用程序或库,就能够与所有支持 JNI 的 Java 虚拟机协同工作。 本章论及以下主题: HYPERLINK http://www.iplab.cs.tsukuba.ac.jp/%7Eliuxj/jdk1.2/zh/docs/guide/jni/spec/intro.doc.html \l 16635 Java 本地接口概述 HYPERLINK http://www.iplab.cs.tsukuba.ac.jp/%7Eliuxj/jdk1.2/zh/docs/guide/jni/spec/intro.doc.html \l 16230 背景 HYPERLINK http://www.iplab.cs.tsukuba.ac.jp/%7Eliuxj/jdk1.2/zh/docs/guide/jni/spec/intro.doc.html \l 16410 目标 HYPERLINK http://www.iplab.cs.tsukuba.ac.jp/%7Eliuxj/jdk1.2/zh/docs/guide/jni/spec/intro.doc.html \l 16465 Java 本地接口方法 HYPERLINK http://www.iplab.cs.tsukuba.ac.jp/%7Eliuxj/jdk1.2/zh/docs/guide/jni/spec/intro.doc.html \l 16539 利用 JNI 编程 HYPERLINK http://www.iplab.cs.tsukuba.ac.jp/%7Eliuxj/jdk1.2/zh/docs/guide/jni/spec/intro.doc.html \l 00002 JDK 1.1.2 中的变化 Java 本地接口概述 尽管可以完全用 Java 编写应用程序,但是有时单独用 Java 不能满足应用程序的需要。程序员使用 JNI 来编写 Java 本地方法,可以处理那些不能完全用 Java 编写应用程序的情况。 以下示例说明了何时需要使用 Java 本地方法: 标准 Java 类库不支持与平台相关的应用程序所需的功能。 已经拥有了一个用另一种语言编写的库,而又希望通过 JNI 使 Java 代码能够访问该库。 想用低级语言(如汇编语言)实现一小段时限代码。 通过用 JNI 编程,可以将本地方法用于: 创建、检查及更新 Java 对象(包括数组和字符串)。 调用 Java 方法。 捕捉和抛出异常。 加载类和获得类信息。 执行运行时类型检查。 也可以与调用 API 一起使用 JNI,以允许任意本地应用程序嵌入到 Java 虚拟机中。这样使得程序员能够轻易地让已有应用程序支持 Java,而不必与虚拟机源代码相链接。 背景 目前,不同厂商的虚拟机提供了不同的本地方法接口。这些不同的接口使程序员不得不在给定平台上编写、维护和分发多种版本的本地方法库。 下面简要分析一下部分已有本地方法接口,例如: JDK 1.0 本地方法接口 Netscape 的 Java 运行时接口 Microsoft 的原始本地接口和 Java/COM 接口 JDK 1.0 本地方法接口 JDK 1.0 附带有本地方法接口。遗憾的是,有两点原因使得该接口不适合于其它 Java 虚拟机。 第一,平台相关代码将 Java 对象中的域作为 C 结构的成员来进行访问。但是,Java 语言规范没有规定在内存中对象是如何布局的。如果 Java 虚拟机在内存中布局对象的方式有所不同,程序员就不得不重新编译本地方法库。 第二,JDK 1.0 的本地方法接口依赖于保守的垃圾收集器。例如,无限制地使用 unhand 宏使得有必要以保守方式扫描本地堆栈。 Java 运行时接口 Netscape 建议使用 Java 运行时接口 (JRI),它是 Java 虚拟机所提供服务的通用接口。JRI 的设计融入了可移植性---它几乎没有对底层 Java 虚拟机的实现细节作任何假设。JRI 提出了各种各样的问题,包括本地方法、调试、反射、嵌入(调用)等等。 原始本地接口和 Java/COM 接口 Microsoft Java 虚拟机支
显示全部
相似文档