gpt4 book ai didi

java - 如何通过偏移量读取变化的文本文件

转载 作者:行者123 更新时间:2023-12-02 04:38:18 24 4
gpt4 key购买 nike

例如,有一个文本文件。

文本文件发生变化。

test.txt = abcde

1分钟后

test.txt = cdefg
(a,b be deleted / f,g add)

在这种情况下,我将所有过去的文件读取到e

所以我想读取当前文件的f。(这只是一个例子,没有人知道会出现什么词。)

我搜索我读到的最后一个单词并进行偏移的方式是不可能的,因为存在重复的可能性。

非常感谢您的帮助:)

最佳答案

答案将取决于文件系统语义和缓冲区的使用。 Java 运行在操作系统之上,操作系统提供了一个名为"file"的抽象,Java 通过自己的 API(使用 FileInputStream 等)公开该抽象。

如果您使用的是 BufferedReader,则该读取器有一个缓冲区,用于存储从实际文件中读取的内容的内存中副本(由底层操作系统报告)。因此,如果您在 Java 之外更改文件上的内容,则无法保证您的读取器将返回最新的新鲜版本,而不是之前读入缓冲区的任何内容。

获取新鲜内容的安全方法是:

  1. 关闭文件
  2. 再次打开
  3. 找到您要阅读的位置,然后阅读内容。

即使如此,也不能完全保证您获得真正的新鲜内容,因为这取决于操作系统处理写入的方式(这又可能取决于文件所在的设备:网络共享与旋转磁盘不同...)。一个应用程序认为它已将内容写入磁盘(或更糟糕的是:将其写入尚未刷新到磁盘的内部缓冲区)与实际文件完全写入之间可能存在延迟出来并准备好供其他人阅读。请注意对完全的强调:如果您在其他地方仍在写入文件时阅读这些文件,您可以获得文件的部分更新版本。

这是人们使用数据库的原因之一:它们保证您永远不会获得部分更新的版本(通过使用事务和原子更新)。有比文件更好的方法来在同一台机器上的两个应用程序之间进行通信;例如,考虑使用套接字。

关于java - 如何通过偏移量读取变化的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56537650/

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