数据编组支持

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

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

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

  • 无效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 编组为 file *。 * version *表示文件格式。
  • PyObject * PyMarshal_WriteObjectToString(PyObject ** value *,int * version *)

    • 返回值:新参考.

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

以下Function允许读回编组的值。

  • 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 对象。

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

  • PyObject * PyMarshal_ReadLastObjectFromFile(FILE ** file *)
    • 返回值:新参考.

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

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

  • PyObject * PyMarshal_ReadObjectFromString(const char ** data *,Py_ssize_t * len *)
    • 返回值:新参考.

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

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