作者:empty 页数:129 出版社:empty |
这本书涉及了 Java 本地接(JNI) 。如果你对下列情况感兴趣, 这本书将对你有用整合带有例如 C 或C++*语言编写的传统代码的Java应用程序。用例如 C“或C++ 语言编写的已存在的程序来实现Java虚拟机。实现一个Java虚拟机(Java virtual machine)理解在语言互操作性上的技术说明,特别是怎样处理例如垃圾收集和多线程的特性。首先, 这本书是为开发者写的。在 JNI 各种特性上的丰富的各种讨论, 和在怎样有效的使用 JNI 的有帮助的提示后, 你将能发现很容易按部就班的开始使用“JNI 。“JNI 在1997年初创始发布。这本书总结了, 在 Sun 微系统(Sun Mier o system) 上工程师和还有在技术交流社区中大量的开发者,得的两年经验。第二, 这本书体现了各种 JNI 特性的设计基本原理, 不仅学术界感兴趣这个, 而且十分透彻的实际理解也是高效使用JNI的先决条件.第三, 这个书的部分是为 Java 2 平台的 JNI 定义规范。JNI编程可以使用这个规范当作参考说明书。Java拟机的实现必须按照规范来一致实现,关于这个规范的评论或关于 JNI 的问题请发送到我们的地址邮件:jni@java.sun.com, 为了最新的 Java 2 平台, 或最新的 Java2SDK release .请访问我们的网站 ec http//aya.sun.com>.为关于 Java Series 的更新信息包括这本的勘误表和将要出版书的预览,请访问ccchttp:/java.sun.com/Serics>。“JNI 的设计引来了在 Sun Microsystems 和Java技术授权之间的些列争论。“JNI 是来白 Netscape 的JRI Java Runtime Interface) 的部分进化而来, “JNI 是 Warren Harris 设计的。来白Java技术授权公司的许多人积极地参与了设计的讨论, 他们包括RussA run(Microsof) ,Patrick Beard(Apple) .Simon Nash(IBM) , Ken Root(Intel) , I a nEll sion-Taylor(Microsoft) , andMike To u to ghi(Microsoft) 。“JNI 的设计也大量地得益于Sun内部设计评论, 这评论来白Dave Bowen, James Gosling.Peter Kessler.Tim Lindholm, Mark Reinhold, Derek White and Frank Yellin, Dave Brown, DaveConnelly, James Mell ree, Benjamin Renaud, and Tom Rodrigues对JNI 在 Java2SDK 1.2 上的增强做出了有意义的贡献。在俄罗斯新西伯利亚(Novosibirsk) 的兼容性测试的Carla Schroer的团队为 JNI*写了兼容性测试程序。在这过程中, 他们发现了原始规范不清楚或不完整的地方, JNI 技术没有Dave Bowen, Larry Abrahams, Dick Neiss, Jon Kanne gaard.and Alan Bar az的管理支持将不能被开发和部署。我得到来自我的经理Dave Bowen的强有力地支持和鼓励来写这本书。Tim Lindholm,《The Java Virtual Machine Specification》的作者, 在 JNI“被设计时, 正主导Java虚拟机开发.Tim在虚拟机和本机接上做了引领性的工作, 提侣 JNI 的使用和为这书增加了严性和清晰度。为这本书的封面的厨房和餐厅的艺术设计,他也提供初始的草图。这本书得益于许多同事的帮助。An and Palani swamy写了第十章关于一般陷阱和缺陷(oncommon traps and pit fals) 的部分。Janet Keoni g细心地預读初始的草穑和贡献了许多哦有用的意见。Beth Steams根据在线的JNI指南写了第二章的草稿。我从Craig J.Bordelon, Michael Brundage, Mary Dage for de, Joshua Engeland Elliott Hughes处得到关于这木书草稿有价值的评论。Lisa Fn end ly, The Java Sen ies的编者, 有助于这木书的编写和出版, Ken Arnold, The JavaProgramming Language得到作者, 首先提出了JNI书的编写, 我要感谢在整个过程中Mikehe drik son和Marina Lang给的帮助和耐心在Addison-Wesley出版社, Di ance监督了生产流程从复制,编辑和最后的打印。在过去的儿年里, 我和一样在Sun Mic or systems上的Java软件中有才能和奉献的人一起,有特权的工作, 特别是original.HotSpot and Sun Labs虚拟机团队成员, 这木书献给他们第一部分,介绍和指南(Part One:Introduction and Tutorial)
第一章介绍 JNI 是 Java 平台的一个强大的功能。使用 JNI的应用程序能能混合用例如 C 和 C++ 语言编写的本地代码(native code) , 和用Java编程语言编写的代码。“JNI*允许编程人员, 在不丢弃在传统编码上的投入, 来利用Java平台功能。因为 JNI*是 Java 平台的一部分, 编程人员立马解决互操作的问题, 同时解决和Java平台的所有的实现一起工作的问题,这本书是 JNI 的编程指导和參考说明, 书包含三个部分:第二章通过简单的例子, 介绍 JNI .这个说明, 足给不熟悉*JNI 的初始使用者的。第二章到第十章构建了编程者的指南, 这给出了大量JNI功能的全面介绍, 我们通过一系列短而详细描述的例子来展示 JNI 不同的功能, 和展示被证明在 JNI“编程中有用的技术。第十一章到第十三章为所有的JNI类型和函数, 展示明确的规范, 这些章也被组织为参考说明服务,这本书尝试吸引广泛的用户, 他们对JNI不同需求的.这指南和编程引导是为初始编程者,但有经验的开发者和JNI的实现者可以找到更有用的参考章节在这指南和编程引导中, 大多Java本地接(JNT) 编程指南和规范
数读者将可能是开发者, 他们用 JNI 来写应用程序, 这本书的 你 术语将暗指用 JNI 编程的开发者(program with the JNI) 。相反是 JNI 实现者(JNI implementors) 或使用 JNI 写的应用程序的终端用户。这木书假设你有Java, C和C++ 编程语言的基木知识。如果没有, 你可以参考许多有用的优秀的书本:Ken Arnold and James Gosling(Addison-Wesley, 1998) 写的*The Java Program migLanguage, Second Edition , BranK emigh an and Dennis Ritchie《Prentice Hall, 1988) 写的 TheC Programming Language, Second Edition 和Bjam ne Stroustrup(Addison-Wesley 1997) 写的 TheC++Programming Language, Third Edition 这章剩余的部分介绍JNI的背景, 作用和演化。1.1 The Java Platform and Host Environment(Java平台和主机环境)这本书时间用Java编程语言和用本地编程语言(C, C++等(ete.) ) 来写应用程序, 让我们先为这些语言,明确正确的编程环境区域。 Java 半台的编程环境包含 Java 虚拟机(VM) 和Java应用程序编程的接(Java ApplicatonProgramming Inter facc(API) ) 。“Java 应用程序是用 Java 编程语言编写的, 被编译成个独立于机器(machine-independent) 二进制类格式, 一个类在任何Java虚拟机上执行实现, Java的API包含预定义的类集合.Java平台的任何实现被假设支持Java编程语言, 虚拟机和 API ,上机环境(host environment术语代表主机操作系统, 本地库组, 和CPU指令集, 用本地变成语言(native programming languages) 如 C*和 C++“编写本地应用程序(Native application) ,被编译特定主机的一进制编码,和被连接到本地库。本地应用程序和本地库是典型依赖于特定主机环境。为一个操作系统建立的一个 C“应用程序,例如,典型不能呢工作在另一操作系统上。“Java 平台被般的配置在上机环境的上面。例如, “JRE (Java Runtime Enviroment) 是 Sun 产品, 它支持 Java 平台运行在例如 Solari*和 Windows 的存在操作系统上, “Java平台提供组特性,应用程序能依赖独立于底下的上机环境。1.2RoleoftheJNI(JNI的作用)当 Java 半台被配置在主机环境的顶层上, 平台对于允许 Java 应用程序, 带有用其他语言编写地本机编码工作, 是需要或必须的。编程者已经开始采用Java平台来建立用 C 和 C++”编写的传统的应用程序。因为在遗留代码上存在投资价值, 然而, Java 应用程序将和 C 和I C++ 代码共存许多年。JNI的一个强大的特性是允许你来利用Java 平台, 但利用的代码仍然用其他语言来编写。作为 Java“虚拟机(Jave virtual machine) 执行的一部分, JNI 是一个双向接, 允许Java应用程序调用木地代码, 反之亦然(viceversa) .Figure 1.1(图1.1) 说明 JNI的作用,Java appli e ation→Java virtual machine(JNI) ~Native applicationand libraryimplementationand libraryFigure 1.1RoleofJNI JNI 被设计为处理你需要联合Java 应用程序和本地代码的情况、做为一个双向接, JNI 能支持两种木地编码:木地库(native libraries) 和木地应用程序(native application) .你能使用 JNI 来编写, 允许Java应用程序来调用在本地库中实现的函数的本地方法(nativemethod) . Java 应用程序, 通过和他们调用在Java编程语言中实现的方法一样办法, 调用本地方法.然而幕后,本地方法是用另一种语言实现的和位于本地库中。“JNI支持一个调用接(invocation interface) .这个接允许你嵌入一个Java虚拟机执行到你本地应用程序中。本地应用程序能和执行Java虚拟机的本地库链接, 同样因此用调用接来执行用Java编程语言编写的软件控件。例如, 一个用“C 写的 web 浏览器能在嵌入式Java虚拟机执行中执行下载 applets -1.3 Implications of Using the JNI(使用JNI的影响)记住旦个应用程序使用了JNI, 它冒险失去了Java平台的两个好处。首先, 依赖 JNI 的 Java 应用程序不再可以在多种主机环境中运行。即使用Java编程语言编写的应程序的部分可移植到多种主机环境,它将需要重新编译用本地编程语言编写的应用程序的部分。其次, Java编程语言的类型安全和可靠, 然而本地语吉例如C 或C++是没有的, 因此,当你用JNI来写应用程序时你必须额外地细心。一个有恶意的本地方法可能破坏整个应用程序。因为这个原因, Java应用程序在调用JNI特性前, 接受了安全检查。作为般规则,你应该构建应用程序时,在尽量少的类中定义本地方法。这就意味着在本地代码和应用程序利余代码之间有一个明显的隔离-