Используйте позиционирование seek и, при повторяющихся обращениях, индекс смещений. Скорость зависит от характера доступа, носителя, кеша ОС, кодировки и формата файла.
Как работать с большим файлом, если после чтения одной строки нужно перейти к данным в другом конце файла? Что влияет на производительность?
Используйте позиционирование seek и, при повторяющихся обращениях, индекс смещений. Скорость зависит от характера доступа, носителя, кеша ОС, кодировки и формата файла.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте позиционирование seek и, при повторяющихся обращениях, индекс смещений. Скорость зависит от характера доступа, носителя, кеша ОС, кодировки и формата файла.
Для бинарного файла можно хранить точные byte offsets и читать нужный участок напрямую. В текстовом режиме произвольное смещение опасно из-за кодировки и преобразования переносов: используйте поддерживаемые позиции tell либо работайте с байтами и аккуратным декодированием. Сжатый поток часто не поддерживает дешёвый переход к произвольному месту. Частые случайные чтения на HDD намного дороже последовательных; SSD и page cache меняют картину. Если это регулярный сценарий, индексированный формат или БД могут быть уместнее плоского файла.