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

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

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

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

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

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

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

Передача объекта Python, значение, в файл. version указывает на формат файла.

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

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

Вернуться на верх