Документация Python неофициальный перевод

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

Эти процедуры позволяют коду на 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 указывает формат файла.

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

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

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

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

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

Возвращает объект 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)
Возвращаемое значение: новая ссылка.

Возвращает объект 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.