python documentation on array明确指出,阵列符合缓冲区接口。它甚至建议不要使用buffer_info()方法。但是,当我尝试从PyObject_GetBuffer()从C/C++代码获取Py_Buffer或使用python的memoryview时,我得到一个失败。为什么不能从数组对象中获取Py_buffer?
例如,在蟒蛇(我用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(字节阵列),memoryobject(memoryview)和stringobject(STR)有所需的Py_TPFLAGS_HAVE_NEWBUFFER标志设置在它们上面。据我了解,文件是错误的; 数组不支持缓冲区接口。
我可以使用支持缓冲区接口的bytearray,问题是我需要数组的实用fromfile()方法来读取我可以在我的C/C++代码中使用的缓冲区。
是否有替代方案可以让我将文件读入缓冲区并从C代码中使用此缓冲区,而不涉及内存副本? (我想处理大的二进制文件和复制是不太理想的选择)。
同意,正如我在我的问题中所说的。但是... bytearray没有方便的fromfile方法。我想我可以使用字符串对象来表示我的二进制数据,但知道缓冲区(如bytearray)可以从文件中填充扩展我的选项。如果我可以使用另一种缓冲区类型,还有一个字符串的unicode转角情况会被消除。 – David 2011-02-02 20:17:49