我有一个包含100,000行的数据文件,每行只包含两个字段,键和值用逗号分隔,所有键都是唯一的.我想从这个文件中按键查询值.将它加载到地图是不可能的,因为它消耗了太多的内存(代码将在嵌入式设备上运行)并且我不希望DB涉及.到目前为止,我所做的是在我的PC中预处理文件,即对行进行排序,然后在预处理文件中使用如下所示的二进制搜索:
public long findKeyOffset(RandomAccessFile raf, String key)
throws IOException {
int blockSize = 8192;
long fileSize = raf.length();
long min = 0;
long max = (long) fileSize / blockSize;
long mid;
String line;
while (max – min > 1) {
mid = min + (long) ((max – min) / 2);
raf.seek(mid * blockSize);
if (mid > 0)
line = raf.readLine(); // probably a partial line
line = raf.readLine();
String[] parts = line.split(“,”);
if (key.compareTo(parts[0]) > 0) {
min = mid;
} else {
max = mid;
}
}
// find the right line
min = min * blockSize;
raf.seek(min);
if (min > 0)
line = raf.readLine();
while (true) {
min = raf.getFilePointer();
line = raf.readLine();
if (line == null)
break;
String[] parts = line.split(“,”);
if (line.compareTo(parts[0]) >= 0)
break;
}
raf.seek(min);
return min;
}
我认为有比这更好的解决方案.任何人都可以给我一些启示吗?