我想实现一个继承自RawIOBase的类。我正在努力实现 readinto 方法。基本上,我不知道如何更改作为参数传递的bytearray对象的内容。

我已经尝试过以下(幼稚的)方法:

def readinto(self, b):
    data = self.read(len(b))
    b = data
    return len(data)

但是,我怀疑这会将新的bytearray对象分配给局部变量b,并且它不会更改原始bytearray的内容。

最佳答案

来自 RawIOBase.readinto 的文档:



有点困惑,但是您需要写入bytes-like对象b(未读取)

用法示例

import io

class MyIO(io.RawIOBase):
    def readinto(self, b):
        msg = b'hello'
        b[:len(msg)] = msg
        return len(msg)

i = MyIO()
buf = bytearray()
i.readinto(buf)
print(buf)

看一下 BytesIO.readinto 的CPython实现。
基本上,它从对象的缓冲区到函数的输入缓冲区执行memcpy。

关于python - 如何实现readinto()方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45805111/

10-09 19:14