数据编组支持¶
这些例程允许 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 指示文件格式。
此函数可能会失败,在这种情况下,它会设置错误指示器。使用
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
,ValueError
或TypeError
) 并返回NULL
。
-
PyObject *PyMarshal_ReadLastObjectFromFile(FILE *file)¶
- 返回值:新引用。
从以读取模式打开的 FILE* 中的数据流中返回一个 Python 对象。与
PyMarshal_ReadObjectFromFile()
不同,此函数假设不会从文件中读取其他对象,因此它可以积极地将文件数据加载到内存中,以便反序列化可以从内存中的数据而不是从文件中逐字节读取数据。只有在确定不会从文件中读取任何其他内容时才使用这些变体。发生错误时,设置相应的异常 (
EOFError
,ValueError
或TypeError
) 并返回NULL
。
-
PyObject *PyMarshal_ReadObjectFromString(const char *data, Py_ssize_t len)¶
- 返回值:新引用。
从包含 len 个字节的字节缓冲区中的数据流中返回一个 Python 对象,该缓冲区由 data 指向。
发生错误时,设置相应的异常 (
EOFError
,ValueError
或TypeError
) 并返回NULL
。