Использование памяти Java RandomAccessFile

Я пытаюсь получить доступ к данным (только для чтения) из очень большого (> 100 ГБ) текстового файла с кодировкой ascii. Файл в основном содержит координаты (16-значное число с плавающей запятой, включая десятичную точку) и некоторую другую второстепенную информацию (имена и т. д.).

Поэтому я рассматриваю возможность использования RandomAccessFile, чтобы избежать загрузки большого объема данных в память. (Я мог бы, например, кэшировать строки данных в памяти, чтобы ускорить их, но давайте сохраним это на потом и предположим, что время здесь не имеет значения, пока оно не приближается к бесконечности).

Вопрос: могу ли я предположить, что методы seek и read не заставят RandomAccessFile загружать огромное количество данных в память?

Большое тебе спасибо.


person Allen Ai    schedule 15.01.2017    source источник
comment
Если данные доступны только для чтения, вы должны использовать DataInputStream вокруг BufferedInputStream. Вы обнаружите, что это во много раз быстрее, и единственная стоимость памяти - это буфер BufferedInputStream.   -  person user207421    schedule 15.01.2017
comment
@EJP И сколько примерно это стоит? Спасибо!   -  person Allen Ai    schedule 15.01.2017


Ответы (1)


Ты прав. RandomAccessFile в основном представляет собой только оболочку для реальных файлов с небольшим внутренним состоянием, кроме текущего указателя. Все методы чтения/записи требуют, чтобы вы снабжали его собственными массивами, в которые должны быть загружены данные.

Кроме того, на этот вопрос уже был дан ответ Java: прочитать последние n строк ОГРОМНЫЙ файл Читает ли RandomAccessFile в java весь файл в памяти?

person Timmeey    schedule 15.01.2017
comment
Это было расплывчато рассмотрено в комментариях в одном из ответов. Я просто хотел подтверждения! Спасибо. - person Allen Ai; 15.01.2017