TgsMMFStream (постановка)
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (→Формат потока) |
SYSDBA (обсуждение | вклад) (→Формат потока) |
||
| Строка 32: | Строка 32: | ||
# список полей, | # список полей, | ||
# количество записей. | # количество записей. | ||
| − | Данные -- непрерывный поток с данными всех записей | + | Данные -- непрерывный поток с данными всех записей следующей структуры: |
| + | # Разделителей между записями нет. | ||
| + | # Окончание записи находится там, где оканчиваются данные последнего поля в списке. | ||
| + | |||
| + | Защита от поврежденного потока осуществляется следующим образом: | ||
| + | # При считывании из потока, если прочитано записей меньше, чем находится в заголовке, то выдается исключение. | ||
| + | # Если в процессе считывания записи, данные не соответствуют типу поля, то выдается исключение. Например, считалась отрицательная длина строки. | ||
=== См. также === | === См. также === | ||
Версия 15:33, 24 октября 2008
Вспомогательный класс для механизма сохранения в поток. Предназначен для замены TClientDataSet. Использует отображаемые в память файлы для хранения объемов данных, превышающих размер доступной оперативной памяти. Может работать в двух режимах: записи и считывания.
Содержание |
Режим записи
- Создание объекта
- AddFieldDef для каждого поля
- Цикл для каждой записи:
- SetFromDataSetField для каждого поля
- Post
- SaveToStream
- Уничтожение объекта
Режим чтения
- Создание объекта
- LoadFromStream
- Цикл для каждой записи:
- SetDataSetField для каждого поля
- Next
- Уничтожение объекта
Свойства
- RecordCount
- количество записей. Только для чтения.
- CurrentRecord
- номер текущей записи. Только для чтения.
- EOF
- Только для чтения.
Формат потока
Поток состоит из заголовка и данных. Заголовок содержит:
- информацию о версии структуры потока,
- список полей,
- количество записей.
Данные -- непрерывный поток с данными всех записей следующей структуры:
- Разделителей между записями нет.
- Окончание записи находится там, где оканчиваются данные последнего поля в списке.
Защита от поврежденного потока осуществляется следующим образом:
- При считывании из потока, если прочитано записей меньше, чем находится в заголовке, то выдается исключение.
- Если в процессе считывания записи, данные не соответствуют типу поля, то выдается исключение. Например, считалась отрицательная длина строки.