資料 marshal 操作的支援¶
這些例程允許 C 程式碼使用與marshal
模組相同的資料格式來處理序列化物件。有函式可以將資料寫入序列化格式,還有其他函式可以用來讀取回資料。用來儲存 marshal 過的資料的檔案必須以二進位模式開啟。
數值會以最低有效位元組 (the least significant byte) 優先的方式儲存。
這個模組支援兩個版本的資料格式:版本 0 是歷史版本,版本 1 在檔案中共享駐留字串 (interned strings),並在 unmarshal 時使用。版本 2 使用二進位格式來儲存浮點數。Py_MARSHAL_VERSION
表示目前的檔案格式(目前為 2)。
- voidPyMarshal_WriteLongToFile(longvalue,FILE*file,intversion)¶
將一個long 整數value marshal 為file。這只會寫入value 的最低有效 32 位元;無論原生long 型別的大小如何。version 表示檔案的格式。
這個函式可能會失敗,這時會設定錯誤指示器。使用
PyErr_Occurred()
來檢查是否發生錯誤。
- voidPyMarshal_WriteObjectToFile(PyObject*value,FILE*file,intversion)¶
將一個 Python 物件value marshal 為file。version 表示檔案的格式。
這個函式可能會失敗,這時會設定錯誤指示器。使用
PyErr_Occurred()
來檢查是否發生錯誤。
- PyObject*PyMarshal_WriteObjectToString(PyObject*value,intversion)¶
- 回傳值:新的參照。
回傳一個位元組物件,包含value 的 marshal 表示。version 為檔案的格式。
以下函式允許將 marshal 過後的值讀取回來。
- longPyMarshal_ReadLongFromFile(FILE*file)¶
從一個為讀取而開啟的FILE* 中的資料串流回傳一個 Clong。無論long 的原生大小如何,這個函式只能讀取 32 位元的值。
在錯誤發生時,會設定合適的例外(
EOFError
)並回傳-1
。
- intPyMarshal_ReadShortFromFile(FILE*file)¶
從一個為讀取而開啟的FILE* 中的資料串流回傳一個 Cshort。無論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(constchar*data,Py_ssize_tlen)¶
- 回傳值:新的參照。
從一個包含len 位元組、被data 指向的位元組緩衝區中的資料串流回傳一個 Python 物件。
在錯誤發生時,會設定合適的例外(
EOFError
、ValueError
或TypeError
)並回傳NULL
。