Header Ads

[Android NDK] Kiểu dữ liệu chính trong Jni (Lập trình android NDK)



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 .
-      Để 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 :
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 trình tự các điể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:

Powered by Blogger.