JNI规范
a345017062
这个作者很懒,什么都没留下…
展开
-
JNI官方规范中文版——JNI程序设计总结
本章是JNI设计思想的一个概述,在讲的过程中,如果有必要的话,还会对底层实现技术的原理做说明。本章也可以看作是JNIEnv指针、局部和全局引用、字段和方法ID等这些JNI主要技术的规范。有些地方我们可能还会提到一些技术是怎么样去实现的,但我们不会专注于具体的实现方式,主要还是讨论一些实现策略。11.1 设计目标JNI最重要的设计目标就是在不同操作系统上的JVM之间提供二进制兼容,做到一个本翻译 2012-10-14 09:50:41 · 6378 阅读 · 3 评论 -
JNI官方规范中文版——从一个简单的例子开始
本章通过一个简单的例子来示例如何使用JNI。我们写一个JAVA程序,并用它调用一个C函数来打印“Hello World!”。2.1 概述图2.1演示了如何使用JAVA程序调用C函数来打印“Hello World!”。这个过程包含下面几步:1、 创建一个类(HelloWorld.java)声明本地方法。2、 使用javac编译源文件HollowWorld.java,产生Hel翻译 2012-10-14 09:20:48 · 5533 阅读 · 0 评论 -
JNI官方规范中文版——基本类型、字符串、数组
开发者使用JNI时最常问到的是JAVA和C/C++之间如何传递数据,以及数据类型之间如何互相映射。本章我们从整数等基本类型和数组、字符串等普通的对象类型开始讲述。至于如何传递任意对象,我们将在下一章中进行讲述。3.1 一个简单的本地方法JAVA端源代码如下:class Prompt { // native method that prints a prompt an翻译 2012-10-14 09:23:13 · 25626 阅读 · 3 评论 -
JNI官方规范中文版——如何在JNI中抛出Java异常
很多情况下,本地代码做JNI调用后都要检查是否有错误发生,本章讲的就是怎么样检查错误和处理错误。我重点放在JNI函数调用引发的错误上面。如果一个本地方法中调用了一个JNI函数,它必须遵守下面几个步骤来检查和处理这个JNI函数调用时可能引发的错误。至于其它可能的错误,比如本地代码中调用了一个可能引发错误的系统方法,那只需要按照该系统方法的标准文档中规定的来处理就可以了。6.1 概述我们通翻译 2012-10-14 09:32:10 · 21355 阅读 · 0 评论 -
JNI官方规范中文版——如何访问Java中的字段和方法
现在,你知道了如何通过JNI来访问JVM中的基本类型数据和字符串、数组这样的引用类型数据,下一步就是学习怎么样和JVM中任意对象的字段和方法进行交互。比如从本地代码中调用JAVA中的方法,也就是通常说的来自本地方法中的callbacks(回调)。我们从进行字段访问和方法回调时需要的JNI函数开始讲解。本章的稍后部分我们会讨论怎么样通过一些cache(缓存)技术来优化这些操作。在最后,我们还会讨翻译 2012-10-14 09:26:41 · 17743 阅读 · 6 评论 -
JNI官方规范中文版——如何使用JNI中的global reference和local reference
JNI提供了一些实例和数组类型(jobject、jclass、jstring、jarray等)作为不透明的引用供本地代码使用。本地代码永远不会直接操作引用指向的VM内部的数据内容。要进行这些操作,必须通过使用JNI操作一个不引用来间接操作数据内容。因为只操作引用,你不必担心特定JVM中对象的存储方式等信息。这样的话,你有必要了解一下JNI中的几种不同的引用:1、 JNI支持三种引用:局部引用、翻译 2012-10-14 09:29:01 · 24989 阅读 · 4 评论 -
JNI官方规范中文版——如何把一个JVM嵌入到本地程序中
本章讲述如何把一个JVM嵌入到你的本地程序当中去。一个JVM可以看作就是一个本地库。本地程序可以链接这个库,然后通过“调用接口”(invocation interface)来加载JVM。实际上,JDK中标准的启动器也就是一段简单的链接了JVM的C代码。启动器解析命令、加载JVM、并通过“调用接口”(invocation interface)运行JAVA程序。7.1 创建JVM我们用下面这段翻译 2012-10-14 09:35:10 · 9267 阅读 · 5 评论 -
JNI官方规范中文版——在程序中集成JVM需要注意的JNI特征
我们已经讨论了JNI在写本地代码和向本地应用程序中集成JVM时的特征。本章接下来的部分分介绍其它的JNI特征。8.1 JNI和线程JVM可以做到在相同的地址空间内执行多个线程。由于多个线程可能会在同时共享资源,所以,增加了程序的复杂性。要完全理解本章的东西,你需要对多线程编程比较熟悉,知道怎么样在JAVA中用多线程访问共享资源。8.1.1 约束限制如果你的本地代码要运行在多个线翻译 2012-10-14 09:37:19 · 9328 阅读 · 0 评论 -
JNI官方规范中文版——如何在JNI中使用己有的C/C++库
JNI的一个使用方式就是编写一些本地方法来使用己有的本地库。本章介绍了一种生成一个包含一系列本地函数的类库的经典的方式。本章首先用一对一映射这种(one-to-one mapping)最直接的方式来写封装类.接下来,我们会介绍一种叫做共享stubs(shared stubs)的技术来简化编写封装类的任务。然后,在本章的最后,我们会讨论怎么样使用peer classes来封装本地数据结构。本翻译 2012-10-14 09:43:56 · 12133 阅读 · 3 评论 -
JNI官方规范中文版——使用JNI时容易出错的地方
本章总结了JNI实际应用中容易出错的一些情况供JNI程序员参考。10.1 错误检查编写本地方法时最常见的错误就是忘记检查是否发生了异常。我承认,JNI里面的异常检查确实比较麻烦,但是,这很重要。10.2 向JNI函数传递非法参数JNI不会检查参数是否正确,如果你自己不保证参数的正确有效,那么出现什么样的错误是未知的。通常,不检查参数的有效性在C/C++库中是比较常见的。10.3翻译 2012-10-14 09:45:38 · 6296 阅读 · 0 评论 -
JNI官方规范中文版——简介
JNI是JAVA平台的一个重要特征,使用它我们可以重用以前用C/C++写的大量代码。本书既是一个编程指南也是一个JNI手册。本书共包括三部分:1、 第二章通过一个简单的例子介绍了JNI。它的对象是对JNI不熟悉的初学者。2、 3~10章对JNI的特征进行了系统的介绍。我们会举大量的例子来说明JNI的各个特征,这些特征都是JNI中重要且常用的。3、 11~13章是关于JNI的技术规范。可翻译 2012-10-14 09:17:31 · 11913 阅读 · 0 评论