Эффективный способ чтения индексного файла в .NET

Словари обычно имеют индекс и файл данных. Я пишу приложение для словаря в качестве хобби проекта. Я запутался в том, как читать файл смещения в .NET. Индексный файл имеет размер 4-5 МБ. Какой самый эффективный способ получить значение смещения / длины слова.

РЕДАКТИРОВАТЬ: мне нужно знать только, как прочитать смещение файла, если у меня есть слово для поиска. т.е. как искать в индексном файле слово, чтобы я мог получить следующие 8 байтов

13.10.2009 13:38:41
Как слова хранятся в словаре?
rslite 13.10.2009 13:49:54
слова хранятся в виде потока символов ASCII, которые я могу прочитать, если у меня есть смещение и начало. Мне нужно знать, как искать в файле индекса слово, чтобы я мог получить следующие 8 байтов
blitzkriegz 13.10.2009 13:52:24
3 ОТВЕТА
РЕШЕНИЕ

4-5 мегабайт для индекса? Это ничего. Считайте все это в байтовый массив и, используя его как MemoryStream или, что более уместно, проанализируйте все содержимое в соответствующие структуры данных для быстрого поиска (has, b-tree и т. Д.).

2
13.10.2009 14:08:22
Я не могу разобрать это, если я не знаю ключ поиска. Что делать? Я должен искать все 5 МБ данных каждый раз, когда мне нужно получить слово. затем взять смещение и длину из последующих байтов и извлечь из фактического файла данных? Но как обращаться с ключами поиска, которые соответствуют подстрокам слова в индексном файле?
blitzkriegz 14.10.2009 10:25:39
Разбираем словарь, а не указатель. Словарь вполне подходящего размера для чтения в массив / поток памяти. После того, как вы проанализировали словарь, вы можете поместить его в более приемлемую форму. Обратите внимание, что если формат словаря или содержание не изменятся, это то, что вы делаете точно один раз.
plinth 14.10.2009 10:30:52

Stream.Seek(long offset, SeekOrigin origin) будет полезно, чтобы добраться до смещения.

3
13.10.2009 13:45:02

System.IO.BinaryReader имеет метод ReadUInt32, который читает неподписанное целое число. У этого также есть различные методы для чтения двоичных файлов.

0
13.10.2009 13:46:03