Поддержка маршалинга данных¶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.