例如,一个文本文件。
文本文件更改。
test.txt = abcde
1分钟后
test.txt = cdefg
(a,b be deleted / f,g add)
在这种情况下,我将过去的所有文件读到e
。
所以我想读取当前文件的f
。
(这是一个示例,没人知道会出现什么单词。)
搜索可能读到的最后一个单词并进行偏移的方法是不可能的,因为可能会重复。
感谢您的帮助:)
答案 0 :(得分:0)
答案将取决于文件系统语义以及缓冲区的使用。 Java在操作系统之上运行,该操作系统提供了一个称为“文件”的抽象,java通过其自己的API(带有FileInputStream
等)公开。
如果您使用的是BufferedReader
,则该读取器有一个缓冲区,该缓冲区在内存中存储从实际文件中读取的内容的内存副本(由底层操作系统报告)。因此,如果您在Java外部更改文件上的内容,则不能保证您的阅读器将返回最新的最新版本-而不是前一阵子读入缓冲区的任何内容。
获取新鲜内容的安全方法是:
即使那样,也不能完全保证获得真正的新鲜内容,因为它取决于操作系统处理写入的方式(而后者又取决于文件所在的设备:网络共享)与旋转磁盘不同...)。在一个应用程序认为它已将内容写入磁盘(或更糟糕的是:将其写入尚未刷新到磁盘的内部缓冲区)与实际的文件被完全写入之后,可能会有一段时间的延迟。并准备供他人阅读。请注意对完全的强调:如果可以在文件仍在其他地方编写的同时阅读它们,则可以得到文件的部分更新版本。
这是人们使用数据库的原因之一:他们保证您永远不会获得部分更新的版本(通过使用事务和原子更新)。有比文件更好的方法来在同一台计算机上通信两个应用程序。例如,考虑使用套接字。