Это легко.Вы считаете самый длинный шаблон, который вы ищете, затем либо возвращаете указатель файла обратно на эту величину, либо прокручиваете файл, считывая только дельту.
Представьте, что самый длинный шаблон составляет 26 байтов.
- Чтение 1k.
- Проверка всех шаблонов -> ничего.
- Удаление 1k - 26 байт из буфера.
- Чтение 1k - 26 байт из потокаи добавьте в свой буфер
- Перейти к 2.
Редактировать: Позвольте мне уточнить: Есть два способа сделать это, оба имеют свои преимущества.Тот, который я задокументировал выше, лучше всего использовать, если вы читаете из потока, что означает источник данных, который не поддерживает поиск.Однако, если ваш источник данных поддерживает поиск (например, файл файловой системы), вы можете легко сделать то же самое с помощью поиска.Проверьте шаблон, если он не найден, отыщите размер самого длинного шаблона и начните с него.
Если, однако, вы хотите поддерживать поиск шаблонов, размер которых превышает размер буфера, вы можетенужен гораздо более умный алгоритм.Вам понадобится таблица поиска всех шаблонов, которые в данный момент «открыты», когда вы продолжаете читать больше данных, что, в свою очередь, будет стоить больше памяти - вы получите проблему.