数据 marshal 操作支持¶
这些例程允许 C 代码处理与 marshal
模块所用相同数据格式的序列化对象。 其中有些函数可用来将数据写入这种序列化格式,另一些函数则可用来读取并恢复数据。 用于存储 marshal 数据的文件必须以二进制模式打开。
数字值在存储时会将最低位字节放在开头。
The module supports two versions of the data format: version 0
is the
historical version, version 1
(new in Python 2.4) shares interned strings in
the file, and upon unmarshalling. Version 2 (new in Python 2.5) 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)¶ Marshal a
long
integer, value, to file. This will only write the least-significant 32 bits of value; regardless of the size of the nativelong
type.在 2.4 版更改: version indicates the file format.
-
void
PyMarshal_WriteObjectToFile
(PyObject *value, FILE *file, int version)¶ Marshal a Python object, value, to file.
在 2.4 版更改: version indicates the file format.
-
PyObject*
PyMarshal_WriteObjectToString
(PyObject *value, int version)¶ - Return value: New reference.
Return a string object containing the marshalled representation of value.
在 2.4 版更改: version indicates the file format.
以下函数允许读取并恢复存储为 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
类型的长度如何。
-
int
PyMarshal_ReadShortFromFile
(FILE *file)¶ 从打开用于读取的
FILE*
的对应数据流返回一个 Cshort
。 使用此函数只能读取 16 位的值,无论本机short
的长度如何。
-
PyObject*
PyMarshal_ReadObjectFromFile
(FILE *file)¶ - Return value: New reference.
Return a Python object from the data stream in a
FILE*
opened for reading. On error, sets the appropriate exception (EOFError
orTypeError
) and returns NULL.
-
PyObject*
PyMarshal_ReadLastObjectFromFile
(FILE *file)¶ - Return value: New reference.
Return a Python object from the data stream in a
FILE*
opened for reading. UnlikePyMarshal_ReadObjectFromFile()
, this function assumes that no further objects will be read from the file, allowing it to aggressively load file data into memory so that the de-serialization can operate from data in memory rather than reading a byte at a time from the file. Only use these variant if you are certain that you won’t be reading anything else from the file. On error, sets the appropriate exception (EOFError
orTypeError
) and returns NULL.
-
PyObject*
PyMarshal_ReadObjectFromString
(char *string, Py_ssize_t len)¶ - Return value: New reference.
Return a Python object from the data stream in a character buffer containing len bytes pointed to by string. On error, sets the appropriate exception (
EOFError
orTypeError
) and returns NULL.在 2.5 版更改: This function used an
int
type for len. This might require changes in your code for properly supporting 64-bit systems.