J2ME 的記錄管理系統(RMS)提供 RecordEnumeration 進行記錄遍歷,其構造函數支援過濾(RecordFilter)、排序(RecordComparator)與快照更新三大功能。本文詳細說明這兩個介面的實作方式與範例代碼,幫助開發者高效處理持久化數據。
public RecordEnumeration enumerateRecords(
RecordFilter filter,
RecordComparator comparator,
boolean keepUpdated
)
RecordFilter 介面,用於篩選符合條件的記錄;傳 null 表示不篩選。RecordComparator 介面,用於排序;傳 null 依預設順序(記錄 ID 遞增)。true 時會追蹤 RMS 數據變動,開銷較大;一般建議用 false。最簡單用法:rs.enumerateRecords(null, null, false)
介面唯一方法:boolean matches(byte[] candidate)。回傳 true 表示保留該記錄。
public class MyFilter implements RecordFilter {
public boolean matches(byte[] rec) {
// 解析 rec 並回傳是否符合條件
}
}
public class MyFilter implements RecordFilter {
public boolean matches(byte[] rec) {
String str = new String(rec);
return "Hello".equals(str);
}
}
RecordStore rs; // 假設已開啟
RecordFilter rf = new MyFilter();
RecordEnumeration re = rs.enumerateRecords(rf, null, false);
while (re.hasNextElement()) {
int recordId = re.nextRecordId();
// 處理記錄
}
re.destroy();
介面唯一方法:int compare(byte[] rec1, byte[] rec2)。回傳值:
RecordComparator.PRECEDES:rec1 排在 rec2 前面RecordComparator.FOLLOWS:rec1 排在 rec2 後面RecordComparator.EQUIVALENT:順序相等public class MyComparator implements RecordComparator {
public int compare(byte[] rec1, byte[] rec2) {
// 比較邏輯
}
}
public class MyComparator implements RecordComparator {
public int compare(byte[] rec1, byte[] rec2) {
String s1 = new String(rec1);
String s2 = new String(rec2);
int result = s1.compareTo(s2);
if (result == 0) return RecordComparator.EQUIVALENT;
return (result < 0) ? RecordComparator.PRECEDES : RecordComparator.FOLLOWS;
}
}
RecordComparator rc = new MyComparator();
RecordEnumeration re = rs.enumerateRecords(null, rc, false);
while (re.hasNextElement()) {
int recordId = re.nextRecordId();
// 已按排序順序取得
}
re.destroy();
RecordEnumeration 後呼叫 destroy() 釋放資源。keepUpdated=true 僅在極少數即時同步場景下使用。