RMS遍历类RecordFilter和RecordComparator用法

RMS提供的遍历类RecordEnumeration,构造函数原型如下:

Public RecordEnumeration enumerateRecords (RecordFilter filter, RecordComparaTor comparaTor, boolean keepUpdated)

第一个参数是RecordFilter,它就是用来筛选数据库中的纪录的,筛选的条件就是我们需要定义的方法,boolean matches(byte[] data),如果不指定就不筛选。

第二个参数是RecordComparaTor,它是对选择出来的数据进行排序的,如果你不指定的话就按照默认的顺序排序。

第三个参数是boolean类型的,如果是true的话,那么record会跟踪rms中的数据变化,这是比较昂贵的开销,我一般都是用false的。

一般来说,用最简单的即可:RecordEnumeration enumerateRecords(null, null, false);

RMS中遍历RecordEnumeration经常用到,其中接口RecordFilter经常用,RecordComparaTor也会用到,但不多,现分别小结如下:

一。接口RecordFilter的使用

在 enumerateRecords 方法中,fifter为过滤参数,需要自己定义一个继承RecordFilter接口的过滤类,在类里面定义需要过滤的条件。RecordFilter接口只有一个需要实现的接口函数,函数原型如下:

public boolean matches (byte[] candidate)

实现一个 RecordFilter 接口的过滤类的基本结构如下:

  public class MyFilter implements RecordFilter {<br />    public boolean matches(byte[] rec) {}<br />    }

例:创建一个查找匹配字符“Hello”记录的MyFilter类的具体代码如下:

  public class MyFilter implements RecordFilter<br />  {<br />    public boolean matches(byte[] rec)<br />    {<br />      String str = new String(rec);<br />      if(str.equals("Hello") )<br />      {<br />        return true;<br />      }else{<br />        return false;<br />      }<br />    }<br />  }

具体使用MyFilter类的代码如下:

  RecordSTore rs;<br />  RecordFilter rf = new MyFilter();<br />  //创建rs对象的代码略<br />  RecordEnumeration re = null;<br />  try {<br />    re = rs.enumetateRecords(rf, null, false); //过滤条件是rf<br />    if (re.hasNextElement()){<br />      recordID = re.nextRecordId();<br />    }<br />  }catch(Exception e) {<br />  }

二。排序接口RecordComparaTor也会用到,虽然不多,也做一小结吧:

排序RecordComparaTor接口也有一个需要实现的接口函数,原型如下:

public int compare (byte[] rec1, byte[] rec2)

rec1, rec2 分别指需要比较的两条记录的二进制数据,比较的结果返回一个int型数值,数值有三种可能:

RecordComparaTor.PRECEDES   : rec1在rec2之前

RecordComparaTor.FOLLOWS    : rec1在rec2之后

RrcordComparaTor.EQUIVALENT  : 位置相等

实现一个RecordComparaTor接口的比较类基本结构如下:

  public class MyComparaTor implements RecordComparaTor {<br />    public int compare(byte[] rec1, byte[] rec2) {}<br />  }

例:一个2条记录字符串从小到大排序比较的代码如下:

  public class MyComparaTor implements RecordComparaTor {<br /><br />    public int compare(byte[] rec1, byte[] rec2)<br />    {<br />      String str1 = new String(rec1);<br />      String str2 = new String(rec2);<br />      int result = str1.compareTo(str2);<br /><br />      if (result == 0) {<br />        return RecordComparaTor.EQUIVALENT;<br />      } else if (result < 0) {<br />        return RecordComparaTor.PRECEDES;<br />      } else {<br />        return RecordComparaTor.FOLLOWS;<br />      }<br />    }<br />  }

具体使用MyComparaTor类的代码如下:

  RecordSTore rs;<br />  RecordComparaTor rc = new RecordComparaTor ();<br />  //创建rs对象的代码略<br />  RecordEnumeration re = null;<br /><br />  try {<br />    re = rs.enumerateRecords(null, rc, false);<br />    if (re.hasNextElement()) {<br />      recordID = re.nextRecordId();<br />    }<br />  }catch (Exception e) {}<br /><br /><End>

生活不是等待风暴过去,而是学会在雨中翩翩起舞。

RMS遍历类RecordFilter和RecordComparator用法

相关文章:

你感兴趣的文章:

标签云: