gpt4 book ai didi

java - 在 Java 中处理文件指针的有效方法? (使用带文件指针的 BufferedReader)

转载 作者:搜寻专家 更新时间:2023-10-31 20:07:41 26 4
gpt4 key购买 nike

我有一个每秒更新一次的日志文件。我需要定期读取日志文件,一旦读取,我需要将文件指针位置存储在我读取的最后一行的末尾,并且在下一次定期读取时我应该从该点开始。

目前,我在 Java 中使用随机访问文件并使用 getFilePointer() 方法获取偏移值,并使用 seek() 方法转到偏移位置。

但是,我已经阅读了大多数文章,甚至 Java 文档建议使用 BufferredReader 来高效读取文件。我如何使用 BufferedReader 实现此目的(获取文件指针并移动到最后一行),或者是否有任何其他有效的方法来完成此任务?

最佳答案

一些可行的方法:

  • 使用 FileInputStream 打开文件,skip() 相关的字节数,然后将 BufferedReader 环绕在流周围(通过 InputStreamReader);
  • 打开文件(使用 FileInputStream 或 RandomAccessFile),在流/RandomAccessFile 上调用 getChannel() 以获取底层 FileChannel,在 channel 上调用 position(),然后调用 Channels.newInputStream() 从中获取输入流 channel ,您可以将其传递给 InputStreamReader -> BufferedReader。

我还没有诚实地分析这些,看看哪个在性能方面更好,但你应该看看哪个在你的情况下效果更好。

RandomAccessFile 的问题本质上是它的 readLine() 方法效率很低。如果您方便地从 RAF 读取并自己进行缓冲以拆分行,那么 RAF 本身并没有什么问题——只是它的 readLine() 实现不佳

关于java - 在 Java 中处理文件指针的有效方法? (使用带文件指针的 BufferedReader),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com