nativeメソッドの引数(プリミティブ型)
nativeメソッドから引数を渡せなければ,あんまり嬉しくない.なので,ここではいろんなプリミティブ型の引数を渡しみる.
私の環境では/usr/lib/j2sdk1.3/includeの/usr/lib/j2sdk1.3/include/jni.hとlinux/jni_md.hで,プリミティブ型のCでの型は以下のようにマッピングされているようだ.
jbooleanはJNI_TRUEとJNI_FALSEをとる.Javaでは各型のバイト数が厳密に定義されている.すなわちCのように実装依存ではない.この両者の違いをJavaネイティブ型によって吸収し,Javaとネイティブコード間での互換性を保証する.念のためJavaの各型のバイト数を示しておく.
| java | C | typedefされた名前(Javaネイティブ型) |
|---|---|---|
| byte | signed char | jbyte |
| short | short | jshort |
| char | unsigned short | jchar |
| int | long | jint |
| long | long long | jlong |
| float | float | jfloat |
| double | double | jdouble |
| boolean | unsigned char | jboolean |
| Javaのプリミティブ型 | バイト数 |
|---|---|
| byte | 8ビット(1バイト) |
| short | 16ビット(2バイト) |
| char | 16ビット(2バイト) |
| int | 32ビット(4バイト) |
| long | 64ビット(8バイト) |
| float | 32ビット(4バイト) |
| double | 64ビット(8バイト) |
| boolean | 1ビット |
ではこれらを渡すサンプルを作成してみる.まずjava部分.
javahで以下のヘッダファイルができる.
でC部分を以下のようにしてみた.
で実行.
$ java Sample2 got byte argument 1 got short argument 2 got char argument 3 got int argument 4 got long argument 5 got float argument 6.000000 got double argument 7.000000 got boolean argument 1 got boolean argument 0と,プリミティブ型は調査なしのぶっつけ(そしてやっつけ)でできた.それだけにこのページの情報量は少ない.

