Я разрабатываю программу, которая должна читать файл из папки, содержащей примерно 10 ^ 8 файлов.
Как FileInputStream находит нужный файл из предоставленного имени файла? Работает ли он аналогично хэш-карте с временем поиска O (1) или линейно перемещает файлы в данной папке, пока не найдет совпадение?
Я предполагаю, что это может иметь больше общего с тем, как работает хранилище файлов Windows, чем с FileInputStream, но я честно не уверен.
Имя файла передается ОС, и оно считывает каталог, ищущий соответствующее имя. Он может оптимизировать поиск, но Java не вмешивается.
Вы можете рассмотреть возможность разбивать файлы на несколько каталогов и в идеале использовать меньше файлов. Открытие и закрытие большого количества небольших файлов тратит большую часть времени на открытие и закрытие дескриптора файла. Нахождение и чтение обычно намного меньше.
Он просит операционную систему найти файл. Как это делает операционная система? Это зависит от ОС и от файловой системы. По крайней мере, в некоторых случаях ответ: "Да, это работает как HashMap". С другой стороны, я знаю, по крайней мере, некоторые комбинации ОС/файловой системы, которые серьезно увязли, когда у вас более нескольких тысяч файлов в одном каталоге.
type <path-to-some-file>
. Если это быстро, то будет и Java.
SimpleFileVisitor
для этого. ссылка