Вот проблема, которую я пытаюсь решить:
У меня есть около 100 двоичных файлов (всего 158 КБ, и они примерно одинакового размера +/- 50% друг от друга).Мне нужно выборочно проанализировать только несколько из этих файлов (в худшем случае может быть 50, в других случаях всего от 1 до 5).Кстати, это на устройстве Android.
Какой самый быстрый способ сделать это в Java?
Одним из способов может быть объединение всего в один файл изатем с помощью поиска файла, чтобы добраться до каждого отдельного файла.Таким образом, открытие файла нужно будет вызывать только один раз, и обычно это происходит медленно.Однако, чтобы узнать, где находится каждый файл, в начале файла должна быть какая-то таблица, которую можно сгенерировать с помощью скрипта, но файлы также должны быть проиндексированы в таблице вдля того, чтобы они были объединены, чтобы поиск по файлам не занимал много работы (поправьте меня, если я ошибаюсь).
Лучшим способом было бы отобразить файл в память, и тогда таблица не будет 'не должно быть в порядке сортировки конкатенации, потому что отображенный в память файл будет иметь произвольный доступ (снова исправьте меня, если я ошибаюсь).
Создание этой таблицы было бы ненужным, если бы использовалось сжатие zip, потому что zipСжатие уже составляет таблицу.Кроме того, все файлы не нужно будет объединять.Я мог бы заархивировать каталог, а затем получить доступ к каждому из отдельных файлов по их записям в zip-файле.Проблема решена.
За исключением случаев, когда zip-файл не отображен в памяти, он будет читать медленнее, поскольку системные вызовы медленнее, чем прямой доступ к памяти (поправьте меня, если я ошибаюсь). Итак, я пришел к выводу, что наилучшим решением было бы использовать zip-архив с отображением в памяти.
Однако записи ZipFile
возвращают InputStream
для чтения содержимогоВход.И для MappedByteBuffer
требуется RandomAccessFile
, который принимает имя файла в качестве входных данных, а не InputStream
.
Есть ли какой-либо способ отобразить в памяти zip-файл для быстрого чтения?Или есть другое решение этой проблемы чтения выбранных файлов?
Спасибо
РЕДАКТИРОВАТЬ: я проверил скорости открытия, закрытия и анализа файлов здесьстатистические данные, которые я нашел:
Number of Files: 25 (24 for parse because garbage collection interrupted timing)
Total Open Time: 72ms
Total Close Time: 1ms
Total Parse Time: 515ms
(это искажено в пользу Parse, потому что Parse отсутствуетфайл)
%Total time Open takes: 12%
%Total time Close takes: 0.17%
%Total time Parse takes: 88%
Avg time Open takes per file: 2.88ms
Avg time Close takes per file: 0.04ms
Avg time Parse takes per file: 21.46ms