【发布时间】:2011-06-28 04:52:49
【问题描述】:
假设我想获取 lstat() 系统调用返回的文件的几个属性(所有者、大小、权限、时间)。在 Java 中执行此操作的一种方法是创建一个 java.io.File 对象并在其上执行 length()、lastModified() 等调用。到目前为止我有两个问题:
这些调用中的每一个都会触发一个 stat() 调用,并且出于我的目的,stat() 被认为是昂贵的:我试图在数百台主机上并行扫描数十亿个文件,并且(到第一近似值)访问这些文件的唯一方法是通过 NFS,通常针对负载下的 stat() 可能需要半秒的文件管理器集群。
调用不是 lstat(),它通常是 stat()(跟随符号链接)或 fstat64()(打开文件并可能触发写入操作以记录访问时间)。
是否有一种“正确”的方式来做到这一点,这样我最终只需要进行一次 lstat() 调用并访问 struct stat 的成员吗?到目前为止,我从谷歌上找到了什么:
-
JDK 7 将在 java.nio.file 中拥有 PosixFileAttributes 接口,其中包含我想要的一切(但如果可以避免的话,我宁愿不运行我的 JDK 的夜间构建)。
我可以使用 JNI 或 JNA 推出自己的接口(但如果有现有的接口,我宁愿不这样做)。
previous similar question 获得了一些建议的 JNI/JNA 实现。一个消失了,另一个维护有问题(例如,没有下载,只是一个 hg 存储库)。
还有更好的选择吗?
【问题讨论】: