[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 .
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: