猿问

使用RandomAccessFile和BufferedReader加速文件读取

我必须 :-

  • 逐行读取大文本文件。

  • 记下每行读取后的文件指针位置。

  • 如果运行时间大于30秒,则停止读取文件。

  • 从新进程中的最后一个文件指针恢复。

我在做什么 :

  1. 使用RandomAccessFile.getFilePointer()来记录文件指针。

  2. 将RandomAccessFile包装到另一个BufferedReader中,以根据答案加快文件读取过程。

  3. 当时间大于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加快阅读过程吗?



九州编程
浏览 1765回答 2
2回答
随时随地看视频慕课网APP

相关分类

Java
我要回答