RMS và cấu trúc lưu trữ của thư viện trên mobile

Một phần của tài liệu Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR (Trang 47 - 53)

Tìm hiểu về RMS

Trang 48 RMS (Record Management System – hệ thống quản lý bản ghi) là một tập hợp các hàm API giúp cho một MIDlet có thể làm việc với hệ thống lưu trữ dữ liệu nội bộ của ñiện thoại di ñộng. Ở hầu hết tất cả các loại ñiện thoại có hỗ trợ chuẩn MIDP, RMS là nơi lưu trữ dữ liệu nội bộ duy nhất. Hiện nay, có rất nhiều loại ñiện thoại có hỗ trợ việc giao tiếp với bộ nhớ ngoài của ñiện thoại, nhưng việc thao tác với bộ nhớ ngoài của ñiện thoại có tốc ñộ tương ñối chậm, và hay gặp phiền phức với những hộp thoại xác nhận quyền truy cập, do nó có cơ chế bảo mật chặt chẽ và phức tạp hơn RMS. Chính vì những lý do ñó, chúng ta sẽ chọn cách thức lưu dữ liệu trên RMS.

Tiếp theo, chúng ta sẽ cùng tìm hiểu một số thuật ngữ chính trong hệ thống RMS:

•••• Record (bản ghi): là ñơn vị lưu trữ dữ liệu chính, duy nhất và nhỏ

nhất mà ta phải truy xuất trong RMS. ðiều quan trọng, RMS không quy ñịnh kiểu dữ liệu cho một record, record ñó có thể mang bất lỳ loại dữ liệu nào: từ một số nguyên, số thực, chuỗi, một tấm hình… nói chung là bất kỳ loại dữ liệu nào mà người lập trình có thể mã hóa sang chuỗi nhị phân theo một phương thức nào ñó. Tóm lại, dưới góc

Trang 49 ñộ lập trình, người lập trình sẽ làm việc với record dưới dạng mảng nhị phân, ñiều này sẽ giúp người lập trình chủ ñộng hơn rất nhiều trong việc quản lý, kiểm soát dung lượng của bộ nhớ lưu trữ nội bộ của ứng dụng MIDP theo một cách thức tối ưu về kích thước nhất – ñiều cực kỳ quan trọng trong việc phát triển ứng dụng cho ñiện thoại di ñộng.

•••• Record Store (Kho chứa bản ghi): một record không thể ñứng ñộc

lập và truy xuất trực tiếp ñược, mà nó phải thuộc vào một record nào ñó. Vậy Record Store là một tập hợp các record và ñược truy xuất bởi cùng một ứng dụng MIDlet. Người lập trình truy xuất một record thông qua Record Store, và Record Store sẽ ñảm bảo tính chính xác của dữ liệu cho thao tác ñọc và ghi 1 record.

Record Store quản lý record thông qua chỉ số, mỗi record có một số duy nhất và ñược Record Store gán trong quá trình thêm một record mới vào. Chỉ số nhỏ nhất của một record là 1, chỉ số tiếp theo là 2… Chỉ số của record là một số tự tăng, khi xóa một record, chỉ số ñó sẽ không ñược ñiều chỉnh lại. Vì thế, người lập trình nên quản lý chỉ số một cách cẩn thận và chặt chẽ.

Mỗi Record Store ñược xác ñịnh qua một tên, là một chuỗi Unicode có ñộ dài không quá 32 ký tự. Tên của Record Store phải là duy nhất trong một MIDlet suite, nó mang tính nội bộ, có nghĩa là 2 ứng dụng riêng biệt có thể ñặt tên Record Store trùng nhau.

Record Store còn chứa thông tin về phiên bản, và thời gian. Vì thế ứng dụng có thể biết ñược thời ñiểm cuối cùng mà RMS ñược truy xuất.

Trong quá trình lập trình, chúng ta sử dụng Record Store thông qua việc tạo 1 thể hiện (instance) của lớp

Trang 50 và tất cả các lớp sử dụng trong việc thao tác với RMS ñều ñược chứa trong gói

javax.microedition.rms.* Một sốñặc ñiểm cần lưu ý

Giới hạn dung lượng:

Giới hạn dung lượng của RMS cho tất cả các ứng dụng MIDP tùy thuộc vào từng dòng máy ñiện thoại. Bản mô tả ñặc ñiểm của MIDP yêu cầu thiết bị hỗ trợ phải dự trữ ít nhất 8K cho việc ñảm bảo tính ổn ñịnh của hệ thống lưu trữ. Các thư viện lập trình cung cấp cho người lập trình phương thức ñể lấy ra dung lượng của hệ thống lưu trữ, và nếu ứng dụng lưu trữ dữ liệu quá lớn trong khi bộ nhớ ñiện thoại không ñủ thì MIDP sẽ phát sinh lỗi ñể ñảm bảo an toàn cho hệ thống.

Tốc ñộ truy xuất

RMS ñược lưu trữ trong bộ nhớ ổn ñịnh (persistent memory – tức vẫn giữ dữ liệu ngay cả khi tắt máy), vì thế nó thường tru xuất chậm hơn so với bộ nhớ không ổn ñịnh (volatile memory – tức dữ liệu ñược duy trì nhờ ñiện). Và việc truy xuất ở một sô dòng ñiện thoại sẽ tốn rất nhiều thời gian. ðể tối ưu trong việc xử lý, người lập trình nên lưu trữ những giá trị thường thao tác vào volatile memory, và chỉ ghi lại vào RMS khi cần thiết.

Tránh cho ứng dụng rơi vào deadlock

Tình trạng deadlock là tình trạng ứng dụng ñang xử lý một công việc nào ñó, và làm cho ứng dụng rơi vào trạng thái bị “treo”, ở những thiết bị có tốc ñộ chậm, việc truy xuất sẽ làm cho ứng dụng “treo” rất lâu, tạo cảm giác sốt ruột và khó chịu cho người sử dụng. Do ñó, người lập trình thường ñược khuyến cáo nên ñưa thao tác truy xuất ra một luồng riêng, ñể ứng dụng có thể tiếp tục ñược thực hiện những công việc khác như hiển thị màn hình chờ ñang trong trạng thái “chuyển ñộng”, …

Trang 51

Lỗi ngoại lệ (Exception)

Khi thao tác với RMS, các lỗi ngoại lệ sau có thể ñược phát sinh, nhằm mục ñích ñảm bảo an toàn cho hệ thống:

InvalidRecordIDException ñược phát sinh khi người lập trình thực

hiện việc ñọc ghi lên một record thông qua một chỉ số không tồn tại trong Record Store.

RecordStoreFullException ñược phát sinh khi người lập trình thực

hiện ghi dữ liệu có dung lượng lớn hơn sức chứa hiện tại của RMS.

RecordStoreNotFoundException ñược phát sinh khi người lập trình

mở một Record Store không tồn tại trong RMS, thông thường trong trường hợp này, người lập trình chưa tạo Record Store ñó hoặc bị nhầm tên Record Store.

RecordStoreNotOpenException ñược phát sinh khi người lập trình ñọc

ghi vào một Record Store ñã ñóng lại.

RecordStoreException là lớp cao nhất, nó bao hàm những lỗi phát sinh

trên.

Cấu trúc lưu trữ trong RMS (Record Management System)

Cấu trúc tổng quan của Record Store như sau:

Chỉ mục (Record ID) Dữ liệu

1 Lưu thông tin của thư viên

2 Dữ liệu bài hát

… …

Trang 52 Record ñầu tiên trong Record Store lưu trữ thông tin chung của thư viện, phần data ñược lưu theo dạng dữ liệu chuỗi nhị phân, cụ thể như sau:

ðộ dài Nội dung lưu trữ

4 byte Số lượng bài hát có trong thư viện

Các byte còn lại Bao gồm các nhóm dữ liệu về thông tin bài hát, số lượng nhóm ñúng bằng số lượng bài hát ñược nêu ở trên

Thông tin cụ thể của một nhóm dữ liệu thông tin bài hát như sau:

ðộ dài Nội dung lưu trữ

4 byte ID của bài hát, cũng chính là RecordID của nội dung bài nhạc trong Record Store

4 byte ðộ dài của chuỗi lưu trữ tên bài hát, lưu theo ñịnh dạng UTF-8 (có giá trị x)

x byte Chuỗi tên bài hát

4 byte ðộ dài của chuỗi lưu trữ chuỗi tên tác giả (có giá trị y)

y byte Chuỗi tên tác giả

4 byte ðộ dài của nội dung bài hát, tính theo ñơn vị byte (chỉ dùng cho mục ñích hiển thị ra bên ngoài)

Trang 53

Một phần của tài liệu Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR (Trang 47 - 53)

Tải bản đầy đủ (PDF)

(94 trang)