Поддержка маршаллинга данных

Эти процедуры позволяют C коду работать с сериализованными объектами, использующими тот же формат данных, что и модуль marshal. Существуют функции записи данных в формат сериализации и дополнительные функции, которые можно использовать для обратного чтения данных. Файлы, используемые для хранения упакованных данных, должны быть открыты в двоичном режиме.

Числовые значения сохраняются с наименьшим первым значащим байтом.

Модуль поддерживает две версии формата данных: версия 0 является исторической версией, версия 1 совместно использует строки в файле, а также при демаршаллинге. Версия 2 использует двоичный формат для чисел с плавающей запятой. Py_MARSHAL_VERSION указывает текущий формат файла (в настоящее время 2).

void PyMarshal_WriteLongToFile(long value, FILE *file, int version)

Маршал long целого числа, value в file. При этом будут записаны только наименее значимые 32 бита value; независимо от размера собственного типа long. version указывает формат файла.

void PyMarshal_WriteObjectToFile(PyObject *value, FILE *file, int version)

Маршал Python объекта, value в file. version указывает формат файла.

PyObject* PyMarshal_WriteObjectToString(PyObject *value, int version)
Return value: New reference.

Возвращает объект bytes, содержащий маршализированное представление value. version указывает формат файла.

Следующие функции позволяют выполнять обратное чтение упакованных значений.

long PyMarshal_ReadLongFromFile(FILE *file)

Возвращает C long из потока данных в FILE*, открытом для чтения. С помощью этой функции можно считывать только 32-разрядные значения, независимо от собственного размера long.

При ошибке устанавливает соответствующее исключение (EOFError) и возвращает -1.

int PyMarshal_ReadShortFromFile(FILE *file)

Возвращает C short из потока данных в FILE*, открытом для чтения. С помощью этой функции можно считывать только 16-битные значения, независимо от собственного размера short.

При ошибке устанавливает соответствующее исключение (EOFError) и возвращает -1.

PyObject* PyMarshal_ReadObjectFromFile(FILE *file)
Return value: New reference.

Возвращает объект Python из потока данных в FILE*, открытом для чтения.

При ошибке задает соответствующее исключение (EOFError, ValueError или TypeError) и возвращает NULL.

PyObject* PyMarshal_ReadLastObjectFromFile(FILE *file)
Return value: New reference.

Возвращает объект Python из потока данных в FILE*, открытом для чтения. В отличие от PyMarshal_ReadObjectFromFile(), эта функция предполагает, что никакие другие объекты не будут считываться из файла, позволяя ему агрессивно загружать данные файла в память, так что десериализация может работать из данных в памяти, а не считывать байт за один раз из файла. Используйте этот вариант, только если вы уверены, что больше никто не будет читать из файла.

При ошибке задает соответствующее исключение (EOFError, ValueError или TypeError) и возвращает NULL.

PyObject* PyMarshal_ReadObjectFromString(const char *data, Py_ssize_t len)
Return value: New reference.

Возвращает объект Python из потока данных в байтовом буфере, содержащем len байт, на которые указывает data.

При ошибке задает соответствующее исключение (EOFError, ValueError или TypeError) и возвращает NULL.