我正在使用一个文件,并且需要在修改文件时更新 java 中的值。
所以,我想使用检查修改时间lastModified
of File
类,如果修改,则读取文件并更新文件中的单个属性。
我的疑问是,是lastModified
与从文件中读取单个属性/读取整个文件一样繁重。因为我的测试结果显示几乎相同的结果。
那么,是每次读取文件并更新文件的属性还是检查更好呢?lastModified
从长远来看是更好的选择。
Note:此操作每一分钟执行一次。
或者有没有比轮询lastModified更好的选择来检查文件是否已更改。我正在使用java 6。
因为您使用的是 Java 6,所以检查修改日期或文件内容是您唯一的选择(还有另一个答案讨论使用较新的 java.nio.file 功能,如果您可以选择迁移到 Java 7,您真的应该,真的考虑一下)。
回答你原来的问题:
您没有指定文件的位置(即它是在本地磁盘上还是其他地方的服务器上) - 我将假设本地磁盘进行响应,但如果文件位于不同的计算机上,则网络延迟和 netbios/dfs/无论您使用什么网络文件系统都会加剧差异。
检查文件的修改日期涉及从磁盘读取元数据。检查文件内容需要从磁盘读取文件内容(如果文件较小,则为一次读取操作,如果文件较大,则可能为多次读取操作)。
读取文件的内容可能会涉及读/写锁定检查。一般来说,检查文件的修改日期不需要读/写锁检查(取决于文件系统,有may仍然是发生在元数据磁盘页面上的一致性锁,但这些锁通常比文件锁更轻)。
如果文件经常更改(即您实际上希望它每分钟更改一次),那么检查修改日期只是开销 - 在大多数情况下您无论如何都会读取文件内容。如果文件不经常更改,那么如果文件很大(并且您必须读取整个文件才能获取信息),则修改日期检查肯定会有优势。
如果文件很小,并且不经常更改,那么它几乎是一次清洗。在大多数情况下,文件内容和文件元数据已经被分页到 RAM 中 - 因此这两个操作都是对 RAM 中内容的相对有效的检查。
我个人会进行修改日期检查,因为它在逻辑上是有意义的(如果文件大小增长到超过一个磁盘页面,它可以保护您免受性能影响) - 但如果文件频繁更改,那么我只需阅读文件内容。但实际上,无论哪种方式都可以。
这给我们带来了主动提供的建议:我的猜测是,从更大的计划来看,此操作的性能并不是什么大问题。即使花费的时间比现在长 1000 倍,它可能仍然不会影响应用程序的主要用途/性能。因此,我真正的建议是编写代码并继续 - 不要担心它的性能,除非这成为您的应用程序的瓶颈。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)