Предположим, что я хочу получить несколько из свойств файла (владелец, размер, полномочия, времена), как возвращено lstat () системный вызов. Один способ сделать это в Java должно создать java.io. Объект файла и делает вызовы как длина (), lastModified (), и т.д. на нем. У меня есть две проблемы до сих пор:
Каждый из этих вызовов инициировал статистику (), вызов, и для моей статистики целей () s считают дорогим: я пытаюсь просканировать миллиарды файлов параллельно на сотнях хостов, и (в первом приближении) единственный способ получить доступ к этим файлам через NFS, часто против кластеров файлового сервера, где статистика () при загрузке может занять половину секунды.
Вызов не является lstat (), это обычно - статистика () (который следует за символьными ссылками), или fstat64 () (который открывает файл и может инициировать операцию записи для записи времени доступа).
Существует ли "правильный" способ сделать это, такое, что я заканчиваю тем просто, что делал единственный lstat () вызов и получил доступ к членам статистики структуры? Что я нашел так далеко от поиска с помощью Google:
JDK 7 будет иметь интерфейс PosixFileAttributes в java.nio.file со всем, что я хочу (но я не выполнил бы ночные сборки своего JDK, если я могу избежать его).
Я могу прокрутить свой собственный интерфейс с JNI или JNA (но я быть бы, если существует существующий).
Предыдущий подобный вопрос добрался, несколько предложили реализации JNI/JNA. Каждый ушел, и другой сомнительно сохраняется (например, никакие загрузки, просто hg репозиторий).
Есть ли там какие-либо более оптимальные варианты?
Похоже, вы в значительной степени охватили все основы. Когда я начал читать ваш вопрос, моей первой мыслью был JDK 7 или JNI. Не зная ничего о шаблоне изменения в этих файлах, вы также можете изучить какой-то постоянный кеш с рассматриваемой информацией, например, встроенную БД. Вы также можете изучить другой метод доступа, помимо NFS, например настраиваемую веб-службу, которая предоставляет информацию о большом количестве файлов с удаленного хоста.