Підтримка маршалінгу даних

Ці процедури дозволяють коду C працювати з серіалізованими об’єктами, використовуючи той самий формат даних, що й модуль marshal. Існують функції для запису даних у формат серіалізації та додаткові функції, які можна використовувати для зворотного читання даних. Файли, які використовуються для зберігання маршалованих даних, необхідно відкривати в двійковому режимі.

Числові значення зберігаються з молодшим байтом першим.

Модуль підтримує дві версії формату даних: версія 0 є історичною версією, версія 1 надає спільний доступ до вбудованих рядків у файлі та після демаршалінгу. Версія 2 використовує двійковий формат для чисел з плаваючою комою. Py_MARSHAL_VERSION вказує на поточний формат файлу (наразі 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 native long type. version indicates the file format.

This function can fail, in which case it sets the error indicator. Use PyErr_Occurred() to check for that.

void PyMarshal_WriteObjectToFile(PyObject *value, FILE *file, int version)

Маршал об’єкта Python, значення, до файлу. версія вказує на формат файлу.

This function can fail, in which case it sets the error indicator. Use PyErr_Occurred() to check for that.

PyObject *PyMarshal_WriteObjectToString(PyObject *value, int version)
Return value: New reference.

Повертає об’єкт bytes, що містить упорядковане представлення value. версія вказує на формат файлу.

Наступні функції дозволяють зчитувати упорядковані значення.

long PyMarshal_ReadLongFromFile(FILE *file)

Return a C long from the data stream in a FILE* opened for reading. Only a 32-bit value can be read in using this function, regardless of the native size of long.

У разі помилки встановлює відповідний виняток (EOFError) і повертає -1.

int PyMarshal_ReadShortFromFile(FILE *file)

Return a C short from the data stream in a FILE* opened for reading. Only a 16-bit value can be read in using this function, regardless of the native size of short.

У разі помилки встановлює відповідний виняток (EOFError) і повертає -1.

PyObject *PyMarshal_ReadObjectFromFile(FILE *file)
Return value: New reference.

Return a Python object from the data stream in a FILE* opened for reading.

У разі помилки встановлює відповідний виняток (EOFError, ValueError або TypeError) і повертає NULL.

PyObject *PyMarshal_ReadLastObjectFromFile(FILE *file)
Return value: New reference.

Return a Python object from the data stream in a FILE* opened for reading. Unlike PyMarshal_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.

У разі помилки встановлює відповідний виняток (EOFError, ValueError або TypeError) і повертає NULL.

PyObject *PyMarshal_ReadObjectFromString(const char *data, Py_ssize_t len)
Return value: New reference.

Повертає об’єкт Python із потоку даних у байтовий буфер, що містить len байти, на які вказує data.

У разі помилки встановлює відповідний виняток (EOFError, ValueError або TypeError) і повертає NULL.