Поддержка маршалинга данных¶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 указывает формат файла.
- void PyMarshal_WriteObjectToFile(PyObject *value, FILE *file, int version)¶
Маршалирует объект Python, value, в file. version указывает формат файла.
- PyObject* PyMarshal_WriteObjectToString(PyObject *value, int version)¶
- Возвращаемое значение: новая ссылка.
Возвращает строковый объект, содержащий маршалированное представление value. version указывает формат файла.
Следующие функции позволяют считывать маршалированные значения обратно.
XXX А как насчёт обнаружения ошибок? Похоже, что чтение за концом файла всегда приводит к отрицательному числовому значению (там, где это имеет смысл), но неясно, будут ли отрицательные значения корректно обрабатываться, если ошибки нет. Как определить это правильно? Следует ли записывать только неотрицательные значения с помощью этих процедур?
- long PyMarshal_ReadLongFromFile(FILE *file)¶
Возвращает значение типа long в языке C из потока данных в FILE*, открытом для чтения. С помощью этой функции можно прочитать только 32-битное значение, независимо от нативного размера long.
При ошибке вызывает исключение и возвращает -1.
- int PyMarshal_ReadShortFromFile(FILE *file)¶
Возвращает значение типа short в языке C из потока данных в FILE*, открытом для чтения. С помощью этой функции можно прочитать только 16-битное значение, независимо от нативного размера short.
При ошибке вызывает исключение и возвращает -1.
- PyObject* PyMarshal_ReadObjectFromFile(FILE *file)¶
- Возвращаемое значение: новая ссылка.
Возвращает объект Python из потока данных в FILE*, открытом для чтения.
В случае ошибки устанавливается соответствующее исключение (EOFError или TypeError) и возвращается NULL.
- PyObject* PyMarshal_ReadLastObjectFromFile(FILE *file)¶
- Возвращаемое значение: новая ссылка.
Возвращает объект Python из потока данных в FILE*, открытом для чтения. В отличие от PyMarshal_ReadObjectFromFile(), эта функция предполагает, что из файла больше не будет читаться никаких объектов, что позволяет ей агрессивно загружать данные файла в память, чтобы десериализация могла работать с данными из памяти, а не читать по одному байту из файла. Используйте этот вариант, только если вы уверены, что больше ничего из файла читать не будете.
В случае ошибки устанавливается соответствующее исключение (EOFError или TypeError) и возвращается NULL.
- PyObject* PyMarshal_ReadObjectFromString(const char *string, Py_ssize_t len)¶
- Возвращаемое значение: новая ссылка.
Возвращает объект Python из потока данных в символьном буфере, содержащем len байт, на который указывает string.
В случае ошибки устанавливается соответствующее исключение (EOFError или TypeError) и возвращается NULL.