zah*_*pov 10 python bytearray stream python-3.x
我从某处读取数据缓冲区bytearray.现在,我想用流一样的界面(即该数据的工作read,seek等等)
我可以随身bytearray携带io.BytesIO吗?
mybytearray = bytearray(...)
stream = io.BytesIO(mybytearray)
Run Code Online (Sandbox Code Playgroud)
我担心的是BytesIO复制数据mybytearray,但我不想要它 - 因为缓冲区非常大.我不想要副本,我希望流可以处理原始数据并且也可以修改它.可以做些什么?
Ery*_*Sun 12
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'
Run Code Online (Sandbox Code Playgroud)
编辑:
请参见问题22003,BytesIO写时复制.最新的补丁(cow6)仅支持copy-on-write bytes.
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |