Các kiểu dữ liệu cơ bản :
- Việc tryền và quản lí các biến trong JNI khá phức tạp . Nguyên nhân là
do cấu trúc xây dựng và quản lí biến giữa 2 ngôn ngữ C/C++ và Java
không tương đồng .
do cấu trúc xây dựng và quản lí biến giữa 2 ngôn ngữ C/C++ và Java
không tương đồng .
- Để biểu diễn kiểu dữ liệu chung JNI tạo ra một vài kiểu dữ liệu trung
gian như sau :
gian như sau :
o jobject jboolean jbyte
o jchar jshort jint
o jlong jstring jfloat
o jdouble …
1. Numeric Parameters
- Giữa Java và C có những kiểu dữ liệu đặc trưng khác nhau. Ví dụ trong C kiểu int có 2 nền tảng là 16bit và 32bit, còn trong java kiểu int luôn là 32bit. Do đó JNI định nghĩa ra các kiểu dữ liệu jint, jlong …
- Sự tương ứng trong kiểu dữ liệu:
JAVA programming | C programming | Bytes |
boolean | jboolean | 1 |
byte | jbyte | 1 |
char | jchar | 2 |
short | jshort | 2 |
Int | jint | 4 |
long | jlong | 8 |
float | jfloat | 4 |
double | jdouble | 8 |
- Trong file jni.h cũng định nghĩa được các typedef, JNI_TRUE=1, JNI_FALSE=0
2. String Parameters
- String trong các ngôn ngữ Java làtrình tự các điểm mã UTF-16 trong khi ở ngôn ngữ C, String được chấm dứt bởi byte null.
- String trong jstring (JNI), là một chuỗi unicode 16 bit. Trong C String được xây dựng mặc định từ 8 ký tự bit. Vì vậy, để truy cập vào một đối tượng String trong Java thông qua một C/C++, hoặc trả lại một chuỗi C/C++ cho Java, ta cần phải sử dụng chức năng chuyển đổi JNI trong việc thực hiện.
- JNI tạo ra phương thức để thao tác chuyển đổi chuỗi jstring. Jstring không được sử dụng như 1 string bình thường trong C mà phải qua các phương thức trong JNI
- Jstring có các phương thức hỗ trợ căn bản sau:
• GetStringChars • ReleaseStringChars | Lấy chuỗi String thường |
• GetStringUTFChars • ReleaseStringUTFChars | Lấy ra chuỗi String UTF |
• GetStringLength • GetStringUTFLength | Trả về độ dài chuỗi String |
• NewString • NewStringUTF | Tạo chuỗi String mới |
• GetStringCritical • ReleaseStringCritical | Lấy chuỗi String từ con trỏ truyền vào |
3. Array
- JNI xử lý các mảng nguyên thủy và các mảng đối tượng khác nhau. Mảng nguyên thủy có chứa các yếu tố là các loại nguyên thủy như int và boolean. Mảng đối tượng chứa các yếu tố là các loại object chẳng hạn như trường hợp class và các mảng 2 chiều.
- JNI sử dụng jarray để tao tác với mảng
- Jarray không phải là 1 loại mảng trong C, vì vậy phải sử dụng các phương thức jarray trong JNI thích hợp để truy cập mảng.
- Các phương thức hỗ trợ căn bản:
• Get<Type>ArrayRegion • Set<Type>ArrayRegion | Lấy ra mảng từ 1 mảng căn bản |
• Get<Type>ArrayElements • Release<Type>ArrayElement | Nhận và hủy 1 phần tử mảng |
• GetArrayLength | Trả về số phần tử mảng |
• New<Type>Array | Tạo mảng mới |
• GetPrimitiveArrayCritical • ReleasePrimitiveArrayCritical | Nhận và hủy 1 mảng từ biến con trỏ gửi vào |
No comments:
Post a Comment