为什么无法从数组对象获取 Py_buffer?

2024-01-07

The 关于数组的 python 文档 http://docs.python.org/library/array.html?highlight=array.array#array.array.buffer_info明确指出array符合缓冲区接口。它甚至建议不要使用 buffer_info() 方法。但是当我尝试使用 PyObject_GetBuffer() 从 C/C++ 代码获取 Py_Buffer 或使用 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 标志。据我了解,该文档是错误的;array不支持缓冲区接口。

我可以使用支持缓冲区接口的 bytearray,问题是我需要数组的实用 fromfile() 方法来读取可以在我的 C/C++ 代码中使用的缓冲区。

有没有一种替代方法可以让我将文件读入缓冲区并从 C 代码使用该缓冲区,而不涉及内存复制? (我想处理大的二进制文件,而复制是一个不太理想的选择)。


memoryview仅适用于支持 Python 3 缓冲区接口的对象。array.array在 Python 3 中是这样,但在 Python 2.7 中不是。您可能想为此提交错误报告。只需使用使用bytearray (or str如果您以只读方式使用它)。两者都支持memoryview正好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么无法从数组对象获取 Py_buffer? 的相关文章

随机推荐