PIP 5.6.1
Platform-Independent Primitives
Поток чанков и версионная сериализация

PIChunkStream — бинарный поток, в котором данные хранятся чанками: у каждого чанка целочисленный id и значение. Чтение идёт по id, поэтому можно добавлять или менять порядок полей с сохранением обратной совместимости: старые читатели игнорируют неизвестные id, новые могут пропускать необязательные.

Есть две версии формата (PIChunkStream::Version_1 и Version_2); версию выбирает запись, при чтении она определяется автоматически. По умолчанию запись идёт в Version_2.

Когда использовать

Имеет смысл использовать поток чанков, когда:

  • Нужно расширять структуры без поломки уже сохранённых данных (новые поля — новые id).
  • Нужны необязательные или переставляемые поля в одном потоке.
  • Используется Генерация кода для генерации сериализации: в режиме по умолчанию (chunk) pip_cmg выдаёт операторы через PIChunkStream и id полей (см. Генерация кода по PIMETA id и simple-stream / no-stream).

Для фиксированных неизменяемых форматов достаточно обычных операторов PIBinaryStream (см. Поток ввода/вывода).

Использование

Создают PIChunkStream из PIByteArray (чтение или чтение/запись). Запись: cs << cs.chunk(id, value) или add(id, value); чтение: read() — следующий id, затем get(value). data() возвращает буфер для сохранения или передачи. Примеры генерации операторов — в Генерация кода.