假设我想获取由lstat()系统调用返回的文件的几个属性(所有者,大小,权限,次数)。在Java中执行此操作的一种方法是创建一个java.io.File对象,并对其执行诸如length(),lastModified()等调用。我有两个问题至今:用于Java的Unix stat()/ lstat()
这些调用中的每一个触发的stat()调用,并为我的目的STAT()s被认为昂贵的:我试图扫描数十亿个文件的并行上数百台主机和(到第一次近似)访问这些文件的唯一方法是通过NFS,通常针对加载了stat()的文件集群可能需要半秒钟的时间。调用不是lstat(),它通常是stat()(它遵循符号链接)或fstat64()(它打开文件并可能触发写操作来记录访问时间)。
有没有一种“正确”的方式来做到这一点,这样我最终只做一个lstat()调用并访问struct stat的成员?我从谷歌搜索迄今发现:
JDK 7将在java.nio.file的一切我想要的PosixFileAttributes接口(但如果我可以,我宁愿不进行夜间运行构建我的JDK躲开它)。
我可以用JNI或JNA推出我自己的界面(但是如果存在现有界面,我宁愿不要)。
A previous similar question得到了几个建议的JNI/JNA实现。一个消失了,另一个维护得可疑(例如,没有下载,只是一个hg存储库)。
那里有更好的选择吗?
谢谢!最终我猜JDK 7并不是那么糟糕;我可以使用我正在编写的工具保留二进制文件,并且很快就会生成级别的软件。 – 2009-12-16 13:34:57