MIDP không sử dụng hệ thống file để lưu trữ dữ liệu.Thay vào đó MIDP
lưu toàn bộ thông tin vào non-volatile memory (dung lượng vùng nhớ) bằng
hệ thống lưu trữ gọi là Record Management System (RMS). Thế RMS là gì ?
RMS là hệ thống được tổ chức và quản lý dưới dạng các record (bản
ghi). Mỗi bản ghi có thể chứa bất kỳ loại dữ liệu nào:kiểu số nguyên,
chuỗi ký tự, một ảnh và kết quả của một Record là một chuỗi (mảng) các
byte. Nếu bạn mã hoá dữ liệu của bạn dưới dạng nhị phân (binary), bạn có
thể lưu trữ dữ liệu bằng Record sau đó đọc dữ liệu từ Record và khôi
phục lại dữ liệu ban đầu. Kích thước dữ liệu không được vuợt quá giới
hạn qui định của thiết bị di động. RMS lưu dữ liệu gần như một cơ sở dữ
liệu, bao gồm nhiều dòng, mỗi dòng lại có một số định danh duy nhất.
Một tập các bản ghi(RecordStore) là tập hợp các Record được sắp xếp có
thứ tự. Mỗi Record không thể đứng độc lập mà nó phải thuộc vào một
RecordStore nào đó, các thao tác trên Record phải thông qua RecordStore
chứa nó. Khi tạo ra một Record trong RecordStore, Record được gán một số
định danh kiểu số nguyên gọi là Record ID. Record đầu tiên được tạo ra
sẽ được gán Record ID là 1,sẽ tăng thêm 1 cho các Record tiếp theo.
Record ID không là chỉ mục (index), các thao tác xóa Record trong
RecordStore sẽ không tính toán lại các Record ID của các Record hiện có
cũng không thay đổi Record ID của các Record được tạo mới, ví dụ: xóa
record id 3, thêm một record mới sẽ có id là 4. Data là một dãy các byte
đại diện cho dữ liệu cần lưu. Tên được dung để phân biệt các
RecordStore trong bộ các MIDlet (MIDlet suite). MIDlet suite là tập các
MIDlet có chung không gian tên (name space), chia sẻ cùng tài nguyên
(như RecordStore), các biến tĩnh (static variable) trong các lớp và các
MIDlet này sẽ được đóng gói trong cùng một file khi triển khai. Nếu ứng
dụng của bạn chỉ có một MIDlet thì các RecordStore được sử dụng cũng
phân biệt lẫn nhau bằng các tên. Tên của RecordStore có thể dài đến 32
ký tự Unicode và là duy nhất trong một MIDlet suite.
Tuy nhiên vẫn còn nhiều hạn chế :
Hạn chế về khả năng lưu trữ của thiết bị di động : Dung lượng vùng nhớ
(non-volatile memory) dành riêng cho việc lưu trữ dữ liệu trong RMS thay
đổi tùy theo thiết bị di động. Đặc tả MIDP yêu cầu rằng các nhà sản
xuất thiết bị di động phải dành ra vùng nhớ có kích thước ít nhất 8K cho
việc lưu trữ dữ liệu trong RMS. Đặc tả không nêu giới hạn trên cho mỗi
Record. RMS cung cấp các API để xác định kích thước của mỗi Record, tổng
dung lượng của RecordStore và kích thước còn lại của vùng nhớ này. Do
đó trong quá trình phát triển các ứng dụng J2ME bạn phải cân nhắc trong
việc sử dụng vùng nhớ này.
Tốc độ truy xuất dữ liệu :Các thao tác trên vùng nhớ này sẽ chậm hơn
nhiều khi truy xuất dữ liệu trên bộ nhớ RAM. Giống như tốc độ đọc ổ cứng
và tốc độ đọc từ RAM của máy tính. Trong kỹ thuật lập trình phải thường
xuyên cache dữ liệu và các thao tác liên quan đến RMS chỉ thực hiện tập
trung một lần (lúc khởi động hay đóng ứng dụng).
Cơ chế luồng an toàn :Nếu RecordStore chỉ được sử dụng bởi một MIDlet,
không phải lo lắng vì RMS sẽ dành riêng một Thread để thực hiện các thao
tác trên RecordStore. Tuy nhiên nếu có nhiều MIDlet và Thread cùng chia
sẻ một RecordStore thì phải chú ý đến kỹ thuật lập trình Thread để đảm
bảo không có sự xung đột dữ liệu
————
Trong bài viết này mình sẽ hướng dẫn các bạn, cách đọc ghi chuổi vào ứng
dụng, đây là một trong những cách đơn giản nhất. Sau khi đã tạo project
xong, các bạn tạo một MIDLET mới, dán vào đoạn mạ sau, chúng ta sẽ tìm
hiểu cách hoạt động của nó ở bên dưới .
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import javax.microedition.midlet.*;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
/**
* @author
*/
public class demo_RMI_congdongjava extends MIDlet {
RecordStore rs=null;
public void startApp() {
try {
rs=RecordStore.openRecordStore("helloword", true);
String chuoicanghi="day la dong can ghi";
//ghi
byte[] canghi=chuoicanghi.getBytes();
rs.addRecord(canghi, 0, canghi.length);
System.out.println("Ghi du lieu xong");
System.out.println("-----------------------");
System.out.println("Cac du lieu vua ghi vao la :");
for (int i = 1; i <= rs.getNumRecords(); i++) {
System.out.println(new String(rs.getRecord(i)));
}
rs.closeRecordStore();
System.out.println("-------------");
System.out.println("Thanh cong");
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
Không giống như J2SE hàm Main là đầu vào cho mỗi chương trình, đối
với J2ME thì phải có 3 phương thức tương ứng bất đầu, ngừng, kết thúc
ứng dụng thì mới chạy được. Ở đây chúng ta chỉ thao tác với một MIDLET
không có giao diện chỉ in thử trên giao điện IDE nên chỉ thao tác với
hàm startApp() (đầu vào của ứng dụng).
 
rs=RecordStore.openRecordStore("helloword", true);
rs=RecordStore.openRecordStore("helloword", true);
Có nghĩa là sẽ tạo ra một RecordStore (khái niệm giống như một bảng)
có tên là TranHuy, giá trị boolean thứ 2 có nghĩa là sẽ tạo ra
RecordStore có tên tương ứng này nếu chưa có trên MÍDLET. Dưới đây là
kết quả sau khi chạy đoạn mã này !

Nguồn Cộng đồng java




0 comments:
Post a Comment