Итак, вот такая ситуация:
Мне нужно прочитать большие архивы .gz (ГБ) и что-то вроде «проиндексировать» их, чтобы в дальнейшем можно было получать определенные фрагменты с использованием произвольного доступа.Другими словами, я хочу построчно читать архив и иметь возможность получить конкретное место в файле для любой такой строки.(так что я могу прыгать прямо в эти конкретные места по запросу).(PS: ... и это UTF-8, поэтому мы не можем предположить, что 1 байт == 1 символ.)
Итак, в общем, мне просто нужен BufferedReader, который отслеживает его местоположение в файле.Однако этого, похоже, не существует.
Есть ли что-нибудь доступное или мне нужно накатить свое?
Несколько дополнительных комментариев:
- Я не могу использовать BufferedReader напрямую, поскольку расположение файла соответствует тому, что было буферизовано до сих пор.Другими словами, кратный размеру внутреннего буфера вместо расположения строки.
- Я не могу использовать InputStreamReader напрямую из соображений производительности.Небуферизованный способ был бы медленным, и, между прочим, не хватает удобных методов для чтения строк.
- Я не могу использовать RandomAccessFile, поскольку 1. он заархивирован, а 2. RandomAccessFile использует «модифицированный» UTF-8
Полагаю, лучше всего использовать буферизованный ридер, отслеживающий местоположение файла и смещение буфера ... но это звучит довольно громоздко.Но, может быть, я что-то пропустил.Возможно, уже есть что-то, что можно сделать для чтения файлов построчно и отслеживания местоположения (даже в архиве).
Спасибо за подсказки,
Arnaud