final class SegmentInfos extends Vector
可以看出該類實際上是一個Vector 以及封裝了對該Vevtor的一些操作
實際上封裝的是對segments文件的一些讀寫操作
先來看下segments文件的格式
segments文件的格式:
int: =-1 文件是否是Lucene合法的文件格式正常情況下為 -1
long: 版本號,每更新一次該文件將會將版本號加1
int: 用來命名新段
int: 段的數(shù)目
String + int 段的信息 String是段的名稱 int是段中所含的doc數(shù)目
String + int 同上
所以用Lucene的API,我們可以簡單的打印出其segments的所有信息
try {
//DataInputStream fis = new DataInputStream(new FileInputStream("C:\\sf\\snow\\segments"));
FSDirectory dir=FSDirectory.getDirectory("C:/sf/snow", false);
InputStream input = dir.openFile("segments");
System.out.println("Format:"+input.readInt()); //得到文件標志,是否為正常的segments文件
System.out.println("version:"+input.readLong()); //得到版本號
System.out.println("name:"+input.readInt()); //得到用來重命名新段的int,暫時不知道有什么用
int n=input.readInt(); //段的數(shù)目
System.out.println("SegmentNum:"+n);
for(int i=0;i<n;i++) { //用循環(huán)打印出所有段的信息 名稱和長度
System.out.println("segment "+i+" - name:"+input.readString()+" num:"+input.readInt());
}
} catch (Exception e) {
}
當然,該類提供了更為復雜的訪問和更新segments文件的方法
final void read(Directory directory) 將所有的段信息保存在本vector中
final void write(Directory directory) 跟新該segment文件的內(nèi)容,主要是為了添加段,
主要是更新 版本號 段的數(shù)目,跟新完這些后即可往segment文件后添加新段的信息。