Как получить строку из большого файла, если известно смещение

Файл представляет собой текстовые файлы UTF8.

Каждый символ имеет разное количество байтов, и каждая строка имеет разное количество символов.

Есть ли у vb.net таблица номеров строк для функции расположения байтов или что-то в этом роде?

Также после этого, как это прочитать?


person user4951    schedule 04.04.2012    source источник


Ответы (1)


Класс StreamReader является типичным выбором для построчного чтения файла. Он не ведет никакой истории того, что он читает в файле, и поэтому не знает, где закончилась последняя строка или где будет следующая. При запросе (через ReadLine) он просто обрабатывает символы, пока не достигнет новой строки строки или конца файла.

Я не знаю фактической реализации StreamReader, но я предполагаю, что он использует класс Encoding для обработки многобайтовых кодировок и поддерживает только небольшой буфер потенциально предварительно прочитанных данных для повышения производительности чтения (чтение фрагментов лучше, чем просто 10 байтов, которые вам нужны сейчас). Любые другие буферы, такие как символы в текущей строке, будут локальными для таких функций, как ReadLine, которым они нужны.

Если вам нужно искать случайным образом, вам нужно будет использовать свойство BaseStream, чтобы сгенерировать для себя таблицу начала строки, а затем искать этот поток до начала нужной строки. Оттуда вы сможете использовать ReadLine как обычно.

person Gideon Engelberth    schedule 04.04.2012
comment
Я заметил, что у потокового считывателя нет свойств смещения. Это где бейсстрим киксин? Да, мне понадобятся таблицы начала строки, я полагаю - person user4951; 04.04.2012