gpt4 book ai didi

java - 文件 lastModified 与读取文件

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:32 30 4
gpt4 key购买 nike

我正在使用一个文件,当文件被修改时需要在 java 中更新值。因此,我正在考虑使用 File 类的 lastModified 检查修改时间,如果修改了,则读取文件并从文件更新单个属性。

我的疑问是,lastModified 是否与从文件中读取单个属性/读取整个文件一样重。因为我的测试结果显示几乎相同的结果。

那么从长远来看,是每次读取文件并从文件更新属性更好还是检查 lastModified 是更好的选择。

注意:此操作每分钟执行一次。

或者有什么比轮询 lastModified 更好的选择来检查文件是否已更改。我正在使用 Java 6。

最佳答案

因为您使用的是 Java 6,所以检查修改日期或文件内容是您唯一的选择(还有另一个答案讨论了使用较新的 java.nio.file 功能,如果您可以选择迁移到 Java 7,您应该真的、真的考虑一下)。

回答你原来的问题:

你没有指定文件的位置(即它是在本地磁盘上还是在其他地方的服务器上)——我会假设本地磁盘上的响应,但如果文件在不同的机器上,网络延迟和 netbios/dfs/whatever-network-file-system-you-use 会加剧差异。

检查文件的修改日期涉及从磁盘读取元数据。检查文件内容需要从磁盘读取文件内容(如果文件小,则为一次读取操作。如果文件较大,则可能为多次读取操作)。

读取文件内容可能会涉及读/写锁检查。一般来说,检查文件上的修改日期不会需要读/写锁检查(根据文件系统,元数据磁盘页面可能仍然会发生一致性锁,但一般都是比文件锁更轻)。

如果文件经常更改(即您实际上希望它每分钟更改一次),那么检查修改日期只是开销——在大多数情况下您无论如何都要读取文件内容。如果文件不经常更改,那么如果文件很大(并且您必须阅读整个文件才能获取您的信息),那么修改日期检查肯定会有优势。

如果文件很小,并且不经常更改,那么它几乎是一个清洗。在大多数情况下,文件内容和文件元数据已经被分页到 RAM 中 - 因此这两个操作都是对 RAM 中内容的相对有效的检查。

我个人会做修改日期检查 b/c 它在逻辑上是有意义的(如果文件大小超过一个磁盘页面,它可以保护你免受性能影响) - 但如果文件经常更改,那么我' d 只是读取文件内容。但实际上,无论哪种方式都可以。

这给我们带来了不请自来的建议:我的猜测是,在更大的计划中,此操作的性能并不是什么大问题。即使它花费的时间比现在长 1000 倍,它可能仍然不会影响应用程序的主要用途/性能。所以我在这里的真正建议是编写代码并继续 - 不要担心它的性能,除非它成为您应用程序的瓶颈。

关于java - 文件 lastModified 与读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25501961/

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