Я использую RandomAccessFile
, чтобы прочитать некоторые сведения из большого файла. RandomAccessFile
имеет метод seek
, который указывает курсор на определенную часть файла, которую я хочу прочитать всю строку. Чтобы прочитать эту строку, я использую метод readLine()
.Самый быстрый способ прочитать строку в файле
Я прочитал весь этот файл до и затем создал индекс, который позволяет мне получить доступ к началу любой строки с помощью метода seek
. Этот показатель отлично работает. Я создал этот индекс на основе этого ответа: https://stackoverflow.com/a/42077860/763368
Так что я должен сделать много доступа в этом файле, производительность является важным вопросом, чтобы заботиться, то я ищу другие варианты, чтобы прочитать файл будет конкретной линии и получения всей строки.
Я прочитал, что FileChannel
с MappedByteBuffer
- это хороший вариант для быстрого чтения файлов, но я не видел решения, которое делает то, что я хочу.
P.S .: линии имеют разную длину, и я не знаю этой длины.
Есть ли у кого-нибудь хорошее решение?
Edit:
Файл Я хочу прочитать имеется следующий формат: значение ключа\t
Индекс является HashMap со всеми ключами этого файла было ключей и значений позиция байта (Long
).
Давайте предположим, что я хочу перейти к строке с ключом «Foo», то я должен стремиться к позиции значения, как это:
raf.seek(index.get("foo"))
Если я использую raf.readLine()
возвращение будет все линия с ключом "foo".
Но я не хочу использовать RandomAccessFile
для этой работы, потому что она слишком медленная.
Вот так я делаю сейчас в Scala:
val raf = new RandomAccessFile(file,"r")
raf.seek(position.get(key))
println(raf.readLine)
raf.close
Вы доступ к различным файлам? если нет, то почему вы закрываете доступ к файлу? Если вы сохраняете доступ к файлу открытым, вам не нужно ждать, пока ОС даст вам разрешение на чтение. – Tschallacka
@Tschallacka Я только закрываю в конце всех чтений, это просто пример. Но моя проблема здесь в том, как читать файл. –
Можете ли вы предоставить код чтения индекса и как вы переводите его в позицию поиска. Поскольку вы уже находитесь на хорошем пути, поиск индекса может выиграть от некоторой оптимизации, но без полного кода и выборочных данных это сложно. – Tschallacka