我必须 :-逐行读取大文本文件。记下每行读取后的文件指针位置。如果运行时间大于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加快阅读过程吗?
添加回答
举报
0/150
提交
取消