![]() |
PIP 5.6.1
Platform-Independent Primitives
|
PIBinaryStream представляет собой интерфейс бинарной сериализации. Для версионных расширяемых форматов с id чанков см. Поток чанков и версионная сериализация. Не может быть использован в чистом виде, только в виде миксина или готовых классов: PIByteArray и PIIOBinaryStream.
Используется для сохранения или чтения любых данных. Простые типы читаются/пишутся как блоки памяти, если не созданы конкретные операторы. Сложные типы (нетривиальные) обязаны иметь операторы ввода/вывода, иначе возникнет ошибка компиляции.
Также поддерживаются контейнеры с типами по таким же правилам.
Перечисления интерпретируются как int, логические типы как один байт.
Операторы сохранения добавляют данные в конец потока, а операторы извлечения берут данные из его начала.
Для облегчения написания операторов есть макросы:
Пример:
Результат:
Для сохранения/извлечения блоков произвольных данных используется класс PIMemoryBlock. Потоковые операторы для него просто сохраняют/извлекают блоки байтов в/из потока:
Результат:
Если при чтении из потока не хватило данных (например, закончился массив или файл), то проверка объекта потока на wasReadError() вернёт true. Рекомендуется делать эту проверку после чтения данных для корректной обработки ошибки.