| 目次 | 前の項目 | 次の項目 | 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 までお送りください。