My Account Log in

1 option

The Java Native interface : programmer's guide and specification / Sheng Liang.

LIBRA QA76.38 .L53 1999
Loading location information...

Available from offsite location This item is stored in our repository but can be checked out.

Log in to request item
Format:
Book
Author/Creator:
Liang, Sheng, 1969-
Contributor:
John G. Hartman Memorial Library Fund.
Series:
Java series
The Java series
Language:
English
Subjects (All):
Java (Computer program language).
Java native interface.
Physical Description:
xiv, 303 pages : illustrations ; 24 cm.
Place of Publication:
Reading, Mass. : Addison-Wesley, [1999]
Summary:
The Java Native Interface (JNI) enables the integration of code written in the Java programming language with code written in other languages such as C and C++. It allows programmers to take full advantage of the Java platform without having to abandon their investment in legacy code.
This book is the definitive resource and a comprehensive guide to working with the JNI. Entirely up-to-date, the book offers a tutorial, a detailed description of JNI features and programming techniques, JNI design justifications, and the official specification for all JNI types and functions.
This book uses numerous examples to illustrate programming techniques that have proven to be effective. An entire chapter is devoted to avoiding common traps and pitfalls.
Contents:
Part 1 Introduction and Tutorial
1 Introduction 3
1.1 The Java Platform and Host Environment 4
1.2 Role of the JNI 4
1.3 Implications of Using the JNI 6
1.4 When to Use the JNI 6
1.5 Evolution of the JNI 7
1.6 Example Programs 8
2 Getting Started 11
2.2 Declare the Native Method 13
2.3 Compile the HelloWorld Class 14
2.4 Create the Native Method Header File 14
2.5 Write the Native Method Implementation 15
2.6 Compile the C Source and Create a Native Library 15
2.7 Run the Program 16
Part 2 Programmer's Guide
3 Basic Types, Strings, and Arrays 21
3.1 A Simple Native Method 21
3.1.1 C Prototype for Implementing the Native Method 22
3.1.2 Native Method Arguments 22
3.1.3 Mapping of Types 23
3.2 Accessing Strings 24
3.2.1 Converting to Native Strings 24
3.2.2 Freeing Native String Resources 25
3.2.3 Constructing New Strings 26
3.2.4 Other JNI String Functions 26
3.2.5 New JNI String Functions in Java 2 SDK Release 1.2 27
3.2.6 Summary of JNI String Functions 29
3.2.7 Choosing among the String Functions 31
3.3 Accessing Arrays 33
3.3.1 Accessing Arrays in C 34
3.3.2 Accessing Arrays of Primitive Types 34
3.3.3 Summary of JNI Primitive Array Functions 35
3.3.4 Choosing among the Primitive Array Functions 36
3.3.5 Accessing Arrays of Objects 38
4 Fields and Methods 41
4.1 Accessing Fields 41
4.1.1 Procedure for Accessing an Instance Field 43
4.1.2 Field Descriptors 44
4.1.3 Accessing Static Fields 44
4.2 Calling Methods 46
4.2.1 Calling Instance Methods 47
4.2.2 Forming the Method Descriptor 48
4.2.3 Calling Static Methods 49
4.2.4 Calling Instance Methods of a Superclass 51
4.3 Invoking Constructors 51
4.4 Caching Field and Method IDs 53
4.4.1 Caching at the Point of Use 53
4.4.2 Caching in the Defining Class's Initializer 56
4.4.3 Comparison between the Two Approaches to Caching IDs 57
4.5 Performance of JNI Field and Method Operations 58
5 Local and Global References 61
5.1 Local and Global References 61
5.1.1 Local References 62
5.1.2 Global References 64
5.1.3 Weak Global References 65
5.1.4 Comparing References 66
5.2 Freeing References 66
5.2.1 Freeing Local References 67
5.2.2 Managing Local References in Java 2 SDK Release 1.2 68
5.2.3 Freeing Global References 69
5.3 Rules for Managing References 70
6 Exceptions 73
6.1.1 Caching and Throwing Exceptions in Native Code 73
6.1.2 A Utility Function 75
6.2 Proper Exception Handling 76
6.2.2 Checking for Exceptions 76
6.2.2 Handling Exceptions 78
6.2.3 Exceptions in Utility Functions 79
7 The Invocation Interface 83
7.1 Creating the Java Virtual Machine 83
7.2 Linking Native Applications with the Java Virtual Machine 86
7.2.1 Linking with a Known Java Virtual Machine 86
7.2.2 Linking with Unknown Java Virtual Machines 87
7.3 Attaching Native Threads 89
8 Additional JNI Features 93
8.1 JNI and Threads 93
8.1.1 Constraints 93
8.1.2 Monitor Entry and Exit 94
8.1.3 Monitor Wait and Notify 95
8.1.4 Obtaining a JNIEnv Pointer in Arbitrary Contexts 96
8.1.5 Matching the Thread Models 97
8.2 Writing Internationalized Code 99
8.2.1 Creating jstrings from Native Strings 99
8.2.2 Translating jstrings to Native Strings 100
8.3 Registering Native Methods 101
8.4 Load and Unload Handlers 102
8.4.1 The JNI_OnLoad Handler 102
8.4.2 The JNI_OnUnload Handler 104
8.5 Reflection Support 105
8.6 JNI Programming in C++ 106
9 Leveraging Existing Native Libraries 109
9.1 One-to-One Mapping 109
9.2 Shared Stubs 113
9.3 One-to-One Mapping versus Shared Stubs 116
9.4 Implementation of Shared Stubs 116
9.4.1 The CPointer Class 117
9.4.2 The CMalloc Class 117
9.4.3 The CFunction Class 118
9.5 Peer Classes 123
9.5.1 Peer Classes in the Java Platform 124
9.5.2 Freeing Native Data Structures 125
9.5.3 Backpointers to Peer Instances 127
10 Traps and Pitfalls 131
10.1 Error Checking 131
10.2 Passing Invalid Arguments to JNI Functions 131
10.3 Confusing jclass with jobject 132
10.4 Truncating jboolean Arguments 132
10.5 Boundaries between Java Application and Native Code 133
10.6 Confusing IDs with References 134
10.7 Caching Field and Method IDs 135
10.8 Terminating Unicode Strings 137
10.9 Violating Access Control Rules 137
10.10 Disregarding Internationalization 138
10.11 Retaining Virtual Machine Resources 139
10.12 Excessive Local Reference Creation 140
10.13 Using Invalid Local References 141
10.14 Using the JNIEnv across Threads 141
10.15 Mismatched Thread Models 141
Part 3 Specification
11 Overview of the JNI Design 145
11.1 Design Goals 145
11.2 Loading Native Libraries 146
11.2.1 Class Loaders 146
11.2.2 Class Loaders and Native Libraries 147
11.2.3 Locating Native Libraries 148
11.2.4 A Type Safety Restriction 150
11.2.5 Unloading Native Libraries 151
11.3 Linking Native Methods 151
11.4 Calling Conventions 153
11.5 The JNIEnv Interface Pointer 153
11.5.1 Organization of the JNIEnv Interface Pointer 153
11.5.2 Benefits of an Interface Pointer 155
11.6 Passing Data 155
11.6.1 Global and Local References 156
11.6.2 Implementing Local References 157
11.6.3 Weak Global References 158
11.7 Accessing Objects 158
11.7.1 Accessing Primitive Arrays 158
11.7.2 Fields and Methods 160
11.8 Errors and Exceptions 161
11.8.1 No Checking for Programming Errors 161
11.8.2 Java Virtual Machine Exceptions 162
11.8.3 Asynchronous Exceptions 163
12 JNI Types 165
12.1 Primitive and Reference Types 165
12.1.1 Primitive Types 165
12.1.2 Reference Types 166
12.1.3 The jvalue Type 167
12.2 Field and Method IDs 168
12.3 String Formats 168
12.3.1 UTF-8 Strings 168
12.3.2 Class Descriptors 169
12.3.3 Field Descriptors 169
12.3.4 Method Descriptors 170
12.4 Constants 170
13 JNI Functions 173
13.1 Summary of the JNI Functions 173
13.1.1 Directly-Exported Invocation Interface Functions 173
13.1.2 The JavaVM Interface 174
13.1.3 Functions Defined in Native Libraries 175
13.1.4 The JNIEnv Interface 175
13.2 Specification of JNI Functions 180.
Notes:
Includes index.
Local Notes:
Acquired for the Penn Libraries with assistance from the John G. Hartman Memorial Library Fund.
ISBN:
0201325772
OCLC:
41315494

The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.

Find

Home Release notes

My Account

Shelf Request an item Bookmarks Fines and fees Settings

Guides

Using the Find catalog Using Articles+ Using your account