数据 marshal 操作支持¶
这些例程允许 C 代码处理与 marshal
模块所用相同数据格式的序列化对象。 其中有些函数可用来将数据写入这种序列化格式,另一些函数则可用来读取并恢复数据。 用于存储 marshal 数据的文件必须以二进制模式打开。
数字值在存储时会将最低位字节放在开头。
The module supports two versions of the data format: version 0 is the historical version, version 1 shares interned strings in the file, and upon unmarshalling. Version 2 uses a binary format for floating point numbers. Py_MARSHAL_VERSION indicates the current file format (currently 2).
-
void
PyMarshal_WriteLongToFile
(long value, FILE *file, int version)¶ 将一个
long
整数 value 以 marshal 格式写入 file。 这将只写入 value 最低的 32 位;无论本机long
类型的长度如何。 version 指明文件格式的版本。
-
void
PyMarshal_WriteObjectToFile
(PyObject *value, FILE *file, int version)¶ 将一个 Python 对象 value 以 marshal 格式写入 file。 version 指明文件格式的版本。
-
PyObject*
PyMarshal_WriteObjectToString
(PyObject *value, int version)¶ - Return value: New reference.
返回一个包含 value 的 marshal 表示形式的字节串对象。 version 指明文件格式的版本。
以下函数允许读取并恢复存储为 marshal 格式的值。
XXX What about error detection? It appears that reading past the end of the file will always result in a negative numeric value (where that’s relevant), but it’s not clear that negative values won’t be handled properly when there’s no error. What’s the right way to tell? Should only non-negative values be written using these routines?
-
long
PyMarshal_ReadLongFromFile
(FILE *file)¶ 从打开用于读取的
FILE*
的对应数据流返回一个 Clong
。 使用此函数只能读取 32 位的值,无论本机long
类型的长度如何。On error, raise an exception and return
-1
.
-
int
PyMarshal_ReadShortFromFile
(FILE *file)¶ 从打开用于读取的
FILE*
的对应数据流返回一个 Cshort
。 使用此函数只能读取 16 位的值,无论本机short
的长度如何。On error, raise an exception and return
-1
.
-
PyObject*
PyMarshal_ReadObjectFromFile
(FILE *file)¶ - Return value: New reference.
从打开用于读取的
FILE*
的对应数据流返回一个 Python 对象。On error, sets the appropriate exception (
EOFError
orTypeError
) and returns NULL.
-
PyObject*
PyMarshal_ReadLastObjectFromFile
(FILE *file)¶ - Return value: New reference.
从打开用于读取的
FILE*
的对应数据流返回一个 Python 对象。 不同于PyMarshal_ReadObjectFromFile()
,此函数假定将不再从该文件读取更多的对象,允许其将文件数据积极地载入内存,以便反序列化过程可以在内存中的数据上操作而不是每次从文件读取一个字节。 只有当你确定不会再从文件读取任何内容时方可使用此方式。On error, sets the appropriate exception (
EOFError
orTypeError
) and returns NULL.