Кэширование размеров файлов и эффективный поиск размеров файлов в Java - PullRequest
1 голос
/ 04 мая 2011

Мне нужно определить размер очень большого символьно-закодированного файла.Чтение файла занимает значительное время.

Насколько я понимаю, при первом создании / изменении файла размер кэшируется, поэтому ОС может быстро получить значение при запросе размера, скажем,, файловым менеджером.(например, это кажется быстрым при открытии диалогового окна свойств большого файла в win explorer)

Предполагая, что вышеприведенное верно, можно ли это получить в Java?Я думал, что length () читает файл, чтобы определить размер ... или он фактически получает этот размер в кэше?Или создание объекта File делает это для чтения / получения кэшированного размера?

Мои собственные исследования пока не смогли ответить на эти вопросы.

Буду признателен за некоторую помощьс моим пониманием

Спасибо

Ответы [ 4 ]

5 голосов
/ 04 мая 2011

Файловые системы обычно хранят длину как часть описания файла. Таким образом, ОС знает, где находится конец файла. Эта информация кэшируется при доступе. И повторные обращения к этой информации также будут кешироваться.

Примечание: ОС часто читает с диска больше данных, чем вы просите. Это потому, что доступ к диску дорогой, а память относительно дешевой. например когда вы получите длину одного файла, он может прочитать подробности многих файлов, при условии, что вам может потребоваться информация об этих файлах. т.е. при первом получении информации о файле она, вероятно, уже будет кэширована.

5 голосов
/ 04 мая 2011

getLength () делегирует базовую встроенную функцию операционной системы, чтобы получить длину файла.Вы должны быть в порядке, используя это.

3 голосов
/ 04 мая 2011

Метод length () не читает файл.Он вызывает собственный метод, который делегирует ОС, чтобы получить длину файла.Время его ответа не должно зависеть от фактической длины файла.

2 голосов
/ 04 мая 2011

Я думаю, ты слишком обдумал это. Длина должна запросить файловую систему и выяснить это очень быстро. Это, конечно, не чтение всего файла, а подсчет байтов.

...