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

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

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

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

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

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

Эта функция может не сработать, в этом случае она устанавливает индикатор ошибки. Используйте PyErr_Occurred(), чтобы проверить это.

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

Маршализация объекта Python, значение, в файл. version указывает на формат файла.

Эта функция может не сработать, в этом случае она устанавливает индикатор ошибки. Используйте PyErr_Occurred(), чтобы проверить это.

PyObject *PyMarshal_WriteObjectToString(PyObject *value, int version)
Возвращаемое значение: Новая ссылка.

Возвращает объект bytes, содержащий маршаллированное представление значения. 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)
Возвращаемое значение: Новая ссылка.

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

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

PyObject *PyMarshal_ReadLastObjectFromFile(FILE *file)
Возвращаемое значение: Новая ссылка.

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

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

PyObject *PyMarshal_ReadObjectFromString(const char *data, Py_ssize_t len)
Возвращаемое значение: Новая ссылка.

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

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