Python3非复制流接口到bytearray?

2024-05-29 02:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我把数据缓冲区从某处读到bytearray。现在,我想使用流式接口来处理这些数据(即readseek等)

我可以用io.BytesIO来包装我的bytearray吗?在

mybytearray = bytearray(...)
stream = io.BytesIO(mybytearray)

我担心的是BytesIO复制mybytearray的数据,但我不想要它-因为缓冲区非常大。我不需要拷贝,我希望流在原始数据上工作并且可以修改它。能做什么?在


Tags: 数据ioreadstream原始数据流式seek缓冲区
1条回答
网友
1楼 · 发布于 2024-05-29 02:18:05

BytesIO管理自己的内存,并将复制用于初始化它的缓冲区。您可以将您的bytearray封装在类似文件的类中。或者您可以走另一条路,让BytesIO对象处理内存分配。然后,您可以获得可以通过索引和切片修改的缓冲区视图,但不能在视图存在时重新调整缓冲区的大小:

>>> f = io.BytesIO(b'abc')
>>> view = f.getbuffer()

>>> view[:] = b'def'
>>> f.getvalue()
b'def'

>>> view[3] = b'g'
IndexError: index out of bounds

>>> f.seek(0, 2)
>>> f.write(b'g')
BufferError: Existing exports of data: object cannot be re-sized

>>> del view
>>> f.write(b'g')
>>> f.getvalue()
b'defg'

编辑:

请参见issue 22003BytesIO写入时复制。最新的补丁(cow6)只支持bytes的写时拷贝。在

相关问题 更多 >

    热门问题