Поддержка маршалинга данных¶
Эти процедуры позволяют коду на языке 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
.