Мне нужно работать с большими файлами (много ГБ) и мне нужны быстрые поиски для извлечения определенных строк по запросу.
Идея состояла в том, чтобы сохранить отображение:
some_key -> byte_location
Гдерасположение байта показывает, где в файле начинается строка.
Редактировать: вопрос немного изменился:
Сначала я использовал:
FileInputStream stream = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
FileChannel channel = stream.getChannel();
Я заметил, что FileChannel.position()
не будет возвращать точную позицию, где читатель читает в данный момент, потому что это читатель с буферизацией.Он читает фрагменты заданного размера (16 КБ здесь), поэтому то, что я получаю из FileChannel, кратно 16 КБ, а не точной позиции, где читатель фактически читает.
PS: файл находится в UTF-8