我必须 :-
逐行读取大文本文件。
记下每行读取后的文件指针位置。
如果运行时间大于30秒,则停止读取文件。
从新进程中的最后一个文件指针恢复。
我在做什么 :
使用RandomAccessFile.getFilePointer()来记录文件指针。
将RandomAccessFile包装到另一个BufferedReader中,以根据此答案加快文件读取过程。
当时间大于30秒时,我停止读取文件。使用新的RandomAccessFile重新启动进程并使用RandomAccessFile.seek方法将文件指针移动到我离开的位置。
问题:
当我正在阅读包裹在RandomAccessFile中的BufferedReader时,似乎文件指针在一次调用BufferedReader.readLine()时正在向前移动。但是,如果我直接使用RandomAccessFile.readLine(),文件指针正向一步一步正向移动。
使用BufferedReader作为包装器:
RandomAccessFile randomAccessFile = new RandomAccessFile("mybigfile.txt", "r");BufferedReader brRafReader = new BufferedReader (new FileReader(randomAccessFile.getFD()));while((line = brRafReader.readLine()) != null) { System.out.println(line+", Position : "+randomAccessFile.getFilePointer());}
输出:
Line goes here, Position : 13040Line goes here, Position : 13040Line goes here, Position : 13040Line goes here, Position : 13040
使用Direct RandomAccessFile.readLine
RandomAccessFile randomAccessFile = new RandomAccessFile("mybigfile.txt", "r");while((line = randomAccessFile.readLine()) != null) { System.out.println(line+", Position : "+randomAccessFile.getFilePointer());}
输出:(这是预期的。每次调用readline时文件指针都正常移动)
Line goes here, Position : 11011Line goes here, Position : 11089Line goes here, Position : 12090Line goes here, Position : 13040
谁能告诉我,我在这做什么错?有什么办法可以使用RandomAccessFile加快阅读过程吗?
相关分类