Java检索大文本文件_java – 在预处理的大文本文件中搜索一行

  • Post author:
  • Post category:java


我有一个包含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;

}

我认为有比这更好的解决方案.任何人都可以给我一些启示吗?



版权声明:本文为weixin_42295859原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。