有效地检测文件的特定字节间隔的变化

时间:2014-11-11 16:55:08

标签: java shared-memory

我必须创建一个基于文件的通信协议(该文件是内存映射的,但我们现在可以从中抽象出来)。字节布局是固定的。有几个区域,功能不同。

通知'有一定的区域,例如。 G。字节#0直到字节#32k。每个字节都有两个值之一。让我们说 0x00 0xFF 。索引具有语义,因此如果字节#0 从0x00更新为0xFF,则表示与键0 关联的信息已更新。 对我来说有趣的是从0x00到0xFF的所有转换,反之亦然。

所以我的问题是:

是否存在高效,可能是本机,非轮询方法来检测某个区域中的文件更改(或上述转换)?


其他信息

虽然我已经将java指定为语言,但我愿意接受可以通过java调用的其他语言的解决方案(例如通过JNI的C ++)。

这是一个1对n协议,有1个主要应用程序,与最多n个其他人进行通信。因此,检查整个文件的更改并不是最佳选择。我也称之为不好,因为应用程序的使用方式主要是在给定的时间内可以假定为1比1,但这并非总是如此。

我还被告知只使用1个文件。

1 个答案:

答案 0 :(得分:1)

是,或至少,差不多:请使用java.nio.file.WatchService

FileSystem filesystem = FileSystems.getDefault();
WatchService watcher = filesystem.newWatchService();

此后,您可以使用此观察程序注册观看事件。

Path dir = fileSystem.getPath("/tmp/file");
dir.register(watcher, StandardWatchEventKind.ENTRY_MODIFY);

这不会告诉您文件的特定区域是否发生了变化,但会在有某种变化时通知您。我认为这是你得到的最好的。

如果这还不够好,你可以将文件分成两部分:一个标题(你看的标题)和一个标题(你不会)。