美文网首页
python 将二进制数据读取到可变缓冲区

python 将二进制数据读取到可变缓冲区

作者: 孙广宁 | 来源:发表于2022-05-20 23:22 被阅读0次
    5.9 我们想将二进制数据读入到一个可变缓冲区,中间不经过任何的拷贝环节
    • 可以使用readinto()方法
    >>> def r_into_buffer(filename):
    ...     buf = bytearray(os.path.getsize(filename))
    ...     with open(filename,'rb') as f:
    ...         f.readinto(buf)
    ...     return buf
    ...
    >>> with open('test.bin','wb') as f:
    ...     f.write(b'Hello World')
    ...
    11
    >>> buf = r_into_buffer('test.bin')
    >>> buf
    bytearray(b'Hello World')
    >>> buf[0:5]
    bytearray(b'Hello')
    >>> with open('new_test.bin','wb') as f:
    ...     f.write(buf)
    ...
    11
    >>> with open('new_test.bin','rb') as f:
    ...     f.read()
    ...
    b'Hello World'
    >>>
    
    • readinto()方法可用来将数据填充到任何预分配的数组中

    • 和普通的read方法不同的是,readinto是为已存在的缓冲区填充内容,而不是分配新的对象然后再将他们返回。

    • 可以使用readinto方法来避免额外的内存分配动作。

    • 如:我们如果正在读取一个由相同大小的记录所组成的二进制文件

    >>> r_s = 32
    >>> buf = bytearray(r_s)
    >>> with open('test.bin','rb') as f:
    ...     while True:
    ...         n = f.readinto(buf)
    ...         if n < r_s:
    ...             print("test data < 32 will break")
    ...             break
    ...         else:
    ...             print("test data >32")
    ...
    test data < 32 will break
    >>>
    
    • memoryview函数,内存映像函数,可以是我们对已经存在的缓冲区数据做处理,但是不涉及到拷贝动作,还可以修改内容

    相关文章

      网友评论

          本文标题:python 将二进制数据读取到可变缓冲区

          本文链接:https://www.haomeiwen.com/subject/kdvxprtx.html