Skip to main content

数据编组支持

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

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

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

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

long 整数,value 编组到 file。这将只写入 value 的最低有效32位;而不管原始 long 类型的大小。 version 表示文件格式。

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

将一个Python对象(value)分解为 fileversion 表示文件格式。

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

返回一个包含 value 的编组表示的字符串对象。 version 表示文件格式。

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

XXX错误检测怎么办?看起来读取超过文件的末尾将总是产生一个负数值(这是相关的),但不清楚的负值将无法正确处理时没有错误。什么是正确的方式告诉?应该只使用这些例程编写非负值?

long PyMarshal_ReadLongFromFile(FILE *file)

从打开用于读取的 FILE* 中的数据流返回C long。使用此函数只能读取32位值,而不考虑 long 的本机大小。

出错时,引发异常并返回 -1

int PyMarshal_ReadShortFromFile(FILE *file)

从打开用于读取的 FILE* 中的数据流返回C short。使用此功能只能读取16位值,而不考虑 short 的本机大小。

出错时,引发异常并返回 -1

PyObject* PyMarshal_ReadObjectFromFile(FILE *file)
Return value: New reference.

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

出错时,设置适当的异常(EOFErrorTypeError)并返回 NULL

PyObject* PyMarshal_ReadLastObjectFromFile(FILE *file)
Return value: New reference.

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

出错时,设置适当的异常(EOFErrorTypeError)并返回 NULL

PyObject* PyMarshal_ReadObjectFromString(const char *string, Py_ssize_t len)
Return value: New reference.

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

出错时,设置适当的异常(EOFErrorTypeError)并返回 NULL