2009-10-13 4 views
0

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

EDIT: Мне нужно знать только, как читать файл смещения, если у меня есть слово для поиска. т.е. как искать индексный файл для слова, чтобы я мог получить последующие 8 байтов

+0

Как хранятся слова в словаре? – rslite

+0

слова хранятся как поток символов ASCII, которые я могу прочитать, если у меня есть смещение и начало. Мне нужно знать, как искать индексный файл для слова, чтобы я мог получить последующие 8 байт. – blitzkriegz

ответ

2

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

+0

. Я не могу разобрать его, если я не знаю ключ поиска. Что делать? Я должен каждый месяц искать все данные 5 МБ каждый раз, когда мне нужно получить слово. затем взять смещение и длину из последующих байтов и извлечь из фактического файла данных? Но как обрабатывать ключи поиска, которые соответствуют подстрокам слова в индексном файле? – blitzkriegz

+0

Разбирайте словарь, а не индекс. Словарь полностью подходит для чтения в массив/memorystream. После того, как вы проанализировали словарь, вы можете поместить его в более приемлемую форму. Обратите внимание, что, если формат словаря или содержимое не изменится, это то, что вы делаете ровно один раз. – plinth

3

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

0

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