我想索引大约1GB的大文本文件,所以我存储在另一个文件的新行位置,以便以后通过randomaccessfile访问该文件,这是我的代码
while (true) {
raf.seek(currentPos);
byte[] bytes = new byte[1000000];
raf.read(bytes, 0, bytes.length);
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] == 10) {
rafw.writeInt(currentPos + i);
}
}
currentPos = currentPos + sizeOfPacket;
if (currentPos > raf.length()) {
sizeOfPacket = (int) raf.length() - currentPos;
} else if (currentPos == raf.length()) {
break;
}
bytesCounter = bytesCounter + 1000000;
//Log.d("DicData", "Percentage=" + currentPos + " " + raf.length());
int progress = (int) (bytesCounter * 100.0 / folderSize + 0.5);
iDicIndexingListener.onTotalIndexingProgress(progress < 100 ? progress : 100);
在这里,我检查所有文件字节的值(10),这意味着“\n”新行,我的大问题是:这个过程需要太多的时间,大约15分钟,我的问题是:有没有比这个更快的方法?谢谢
2条答案
按热度按时间vq8itlhq1#
用1MIO写入和读取1GB文件。在我的机器上,每行时间<10秒。我怀疑你的表现瓶颈在别的地方。
4zcjmb1e2#
您可以使用lib scanner预读文件以索引新行位置: