【发布时间】:2010-11-04 10:04:56
【问题描述】:
我必须处理大文件(许多 GB)并且需要快速查找以根据请求检索特定行。
这个想法是维护一个映射:
some_key -> byte_location
字节位置表示文件中该行开始的位置。
编辑:问题有点改变:
我第一次使用:
FileInputStream stream = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
FileChannel channel = stream.getChannel();
我注意到FileChannel.position() 不会返回阅读器当前正在阅读的确切位置,因为它是一个“缓冲”阅读器。它读取给定大小的块(此处为 16k),所以我从 FileChannel 得到的是 16k 的倍数,而不是阅读器实际阅读的确切位置。
PS:文件是 UTF-8 格式
【问题讨论】:
-
你的文件编码是什么?
-
问题是什么?如何跳转到输入流中的给定位置?
in.skip(pos);。或者如何找到想要跳转的位置来阅读整行而不是部分?