数据编组支持

这些例程允许 C 代码使用与 marshal 模块相同的数据格式来处理序列化对象。 有一些函数可以将数据写入序列化格式,还有一些附加函数可以用来将数据读回。用于存储编组数据的文件必须以二进制模式打开。

数值以最低有效字节优先的方式存储。

该模块支持两种数据格式版本:版本 0 是历史版本,版本 1 在文件中共享 interned 字符串,并在解组时共享。 版本 2 对浮点数使用二进制格式。 Py_MARSHAL_VERSION 指示当前文件格式(目前为 2)。

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

long 整数 *value* 编组到 *file*。 这将仅写入 *value* 的最低有效 32 位; 无论原生 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)
返回值:新引用。

返回一个字节对象,其中包含 *value* 的编组表示形式。 *version* 指示文件格式。

以下函数允许将编组值读回。

long PyMarshal_ReadLongFromFile(FILE *file)

从打开以进行读取的 FILE* 中的数据流返回一个 C long。 无论 long 的原生大小如何,只能使用此函数读取 32 位的值。

如果出现错误,则设置适当的异常 (EOFError) 并返回 -1

int PyMarshal_ReadShortFromFile(FILE *file)

从打开以进行读取的 FILE* 中的数据流返回一个 C short。 无论 short 的原生大小如何,只能使用此函数读取 16 位的值。

如果出现错误,则设置适当的异常 (EOFError) 并返回 -1

PyObject *PyMarshal_ReadObjectFromFile(FILE *file)
返回值:新引用。

从打开以进行读取的 FILE* 中的数据流返回一个 Python 对象。

如果发生错误,则设置适当的异常(EOFError, ValueErrorTypeError) 并返回 NULL

PyObject *PyMarshal_ReadLastObjectFromFile(FILE *file)
返回值:新引用。

从打开以进行读取的 FILE* 中的数据流返回一个 Python 对象。 与 PyMarshal_ReadObjectFromFile() 不同,此函数假设不会从文件中读取更多对象,从而可以积极地将文件数据加载到内存中,以便反序列化可以从内存中的数据而不是从文件中一次读取一个字节进行操作。 如果您确定不会从文件中读取任何其他内容,则仅使用这些变体。

如果发生错误,则设置适当的异常(EOFError, ValueErrorTypeError) 并返回 NULL

PyObject *PyMarshal_ReadObjectFromString(const char *data, Py_ssize_t len)
返回值:新引用。

从由 *data* 指向的包含 *len* 个字节的字节缓冲区中的数据流返回一个 Python 对象。

如果发生错误,则设置适当的异常(EOFError, ValueErrorTypeError) 并返回 NULL