目次 | 前の項目 | 次の項目 | Java Native Interface 仕様 |
この章では、JNI がどのように Java の型をネイティブ C の型にマッピングするかを解説します。
#define JNI_FALSE 0 #define JNI_TRUE 1
jsize
整数型は、基本的な添字およびサイズを記述するために使用されます。
typedef jint jsize;
typedef jobject jclass;C++ では、JNI はダミークラスのセットを導入して、サブタイプ関係を強制します。例を示します。
class _jobject {}; class _jclass : public _jobject {}; ... typedef _jobject *jobject; typedef _jclass *jclass;
struct _jfieldID; /* opaque structure */ typedef struct _jfieldID *jfieldID; /* field IDs */ struct _jmethodID; /* opaque structure */ typedef struct _jmethodID *jmethodID; /* method IDs */
jvalue
共用体型は、引数配列で要素型として使用されます。これは次のように宣言されます。
typedef union jvalue { jboolean z; jbyte b; jchar c; jshort s; jint i; jlong j; jfloat f; jdouble d; jobject l; } jvalue;
型のシグニチャー | Java の型 |
---|---|
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
L fully-qualified-class ; | 完全指定のクラス |
[ type | type[] |
( arg-types ) ret-type | メソッドの型 |
long f (int n, String s, int[] arr);次のような型のシグニチャーがあります。
(ILjava/lang/String;[I)J
¥u0001
〜¥u007F
の範囲のすべての文字が 1 バイトで表現されます。
バイトのうち 7 ビットのデータは、表現されている文字の値を示します。null 文字 (¥u000
) および ¥u0080〜¥u07FF
の範囲のすべての文字は、次のように x と y の一対のバイトで表現されます。
このバイトは、((x&0x1f)<<6)+(y&0x3f)
の値で文字を表現します。
¥u0800
〜¥uFFFF
の範囲の文字は、次のように x、y および z の 3 バイトで表現されます。
値が ((x&0xf)<<12)+(y&0x3f)<<6)+(z&0x3f)
の文字は 3 バイトで表現されます。
この形式と「標準」UTF-8 形式とでは、2 つの相違点があります。第一は、null バイト (byte)0
が、1 バイト形式でなく 2 バイト形式でコード化されていることです。このことは Java VM UTF-8 文字列が null を組み込むことがないことを意味します。第ニは、1 バイト、2 バイト、および 3 バイト形式だけが使用されていることです。Java VM はこれより長い UTF-8 形式を認識しません。
Java Native Interface 仕様 (1997 年 3 月 15 日に dkramer によって生成された HTML)
Copyright © 1996, 1997 Sun Microsystems, Inc.All rights reserved
コメントや訂正は、jni@java.sun.com までお送りください。