为了账号安全,请及时绑定邮箱和手机立即绑定

使用RandomAccessFile和BufferedReader加速文件读取

使用RandomAccessFile和BufferedReader加速文件读取

九州编程 2019-04-20 15:15:27
我必须 :-逐行读取大文本文件。记下每行读取后的文件指针位置。如果运行时间大于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加快阅读过程吗?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 1764 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信