我必须处理大文件(许多 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
有任何理由不创建FileInputStream
, call stream.skip(pos)
然后创建一个InputStreamReader
围绕着它,还有一个BufferedReader
周围的InputStreamReader
?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)