JNI学習蓄積の二----データタイプマップ、ドメイン記述子説明

2360 ワード

この文章はオリジナルです.転載は出典を明記してください.http://blog.csdn.net/qinjuning
Javaには二つのタイプがあります.基本タイプと引用タイプはみんな分かります.
JNIの世界にも似たようなデータの種類があります.Javaと比較して、その範囲はもっと厳しいです.以下の通りです.
1、prmitive types----基本データタイプ、例えば:int、float、charなどの基本タイプ
2、reference types----引用タイプ、例えば:クラス、実例、配列.
特に注意が必要です.配列------は対象配列でも基本型配列でもreference typesとして存在します.
1、prmitive types(基本データタイプ)マッピングは下表を参照してください.
これらの基本的なデータタイプはNative層で直接使用できます.
2、reference types(参照データタイプ)マッピングは下表を参照してください.
JavaタイプNative Typeの説明
注意:
1、参照データの種類は直接使用できません.JNI関数によって対応する変換が必要です.
2、マルチ次元配列(二次元配列を含む)はいずれも参照タイプであり、jobject Arayタイプを使用してその値にアクセスする必要がある.
例えば、二次元配列とは、一桁配列の配列を指し、その宣言の使用方法は以下の通りである.
//           , jintArray  
	jclass intArrayClass = env->FindClass("[I"); 
	//      jintArray          ,          dimion
	jobjectArray obejctIntArray  =  env->NewObjectArray(dimion ,intArrayClass , NULL);
    ...//    
また、引用の種類については、次のように継承関係があります.親子関係のタイプを転換します.
クラス記述子
クラス記述子はクラスの完全な名前(パッケージ名+クラス名)で、元の区切り記号を/区切り記号に変換します.
例えば、javaコードの中のjava.lang.String類の記述子はjava/lang/Stringです.
実際に、私はこのタイプのドメイン記述子を直接使って置き換えることができ、成功することができることを発見しました.
例えば、jclass intArClas=env->FindClass(「java/lang/String」)
jclass intArClas=env->FindClassに等しい(「Ljava/lang/String;」)
配列タイプの記述子は、「+そのタイプのドメイン記述子」となります.
たとえば:
int[]その記述子は[I]です.
float[]その記述子は[F]です.
String[]その記述子は[Ljava/lang/String]である.
ドメイン記述子
1、基本タイプの記述子はすでに定義されています.
2、引用の種類の記述子
一般的な引用のタイプはL+このタイプの記述子+です.
例えば、Stringタイプのドメイン記述子は、Ljava/lang/Stringである.
配列に対して、[+そのタイプのドメイン記述子+である.
int[]その記述子は[I]です.
float[]その記述子は[F]です.
String[]その記述子は[Ljava/lang/String]である.
Object[]タイプのドメイン記述子は[Ljava/lang/Object]である.
多次元配列はn個の[+このタイプのドメイン記述子であり、Nはいくつかの次元配列を表している.
int[][]の記述子は[[I]です.
float[][]の記述子は[F]です.
メソッド記述子
パラメータタイプのドメイン記述子を、説明の順序で、括弧の中のかかとのペアに入れて、値タイプのドメイン記述子を返します.規則は以下の通りです.(パラメータのドメイン記述子の重畳)
タイプ記述子です.戻り値がない場合は、V(voidタイプを表します.)で表します.たとえば、以下のようになります.
Java層メソッドJNI関数署名
String test()Ljava/lang/String;
int f(int i,Object Object)(ILjava/lang/Object)I
void set(byte[]bytes)([B]V
プログラミングする時、javahツールを使うなら、これらはすべて私達が手動で対応のタイプの転換を編纂する必要がなくて、javahツールを使うことができないならば、手動のしかありません.
タイプ変換を行いました.
次は具体的な実駅でJNIを具体的に把握します.
Android NDKを使って開発した一連のブログを分析してみると、いいと思います.
「AndroidのNDK開発(3)——JNIデータタイプの詳細」