В документации python для массива четко указано, что массив соответствует интерфейсу буфера.Он даже предлагает не использовать метод buffer_info ().Но когда я пытаюсь получить Py_Buffer из кода C / C ++ с помощью PyObject_GetBuffer () или использовать представление памяти python, я получаю ошибку.
Например, в python (я использую версию 2.7):
>>> a = array.array('c')
>>> memoryview(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot make memory view because object does not have the buffer interface
Фактически, когда я выполняю поиск в кодовой базе Python, только для bytearrayobject (bytearray), memoryobject (memoryview) и stringobject (str) на них устанавливается обязательный флаг Py_TPFLAGS_HAVE_NEWBUFFER.Насколько я понимаю, документация неверна; массив не поддерживает интерфейс буфера.
Я мог бы использовать bytearray, который поддерживает интерфейс буфера, проблема в том, что мне нужен практичный метод массива fromfile () для чтения в буфере, который яможно использовать в моем коде C / C ++.
Есть ли альтернатива, которая позволила бы мне прочитать файл в буфер и использовать этот буфер из кода C, а не задействовать копии памяти?(Я хочу обрабатывать большие двоичные файлы, а копирование - менее желательный вариант).