【问题标题】:How to copy a python bytearray buffer?如何复制 python bytearray 缓冲区?
【发布时间】:2012-05-17 10:22:45
【问题描述】:

我有两个网络缓冲区定义为:

buffer1 = bytearray(4096)
buffer2 = bytearray(4096)

在不分配额外内存的情况下,将内容从buffer2 移动到buffer1 的最快方法是什么?

天真的方法是:

for i in xrange(4096):
    buffer1[i] = buffer2[i]

显然,如果我这样做 buffer1[:]=buffer2[:] python 会移动内容,但我不能 100% 确定,因为如果我这样做:

a = bytearray([0,0,0])
b = bytearray([1,1])
a[:]=b[:]

然后len(a)=2。丢失的字节会发生什么?谁能解释这是如何工作的或如何在缓冲区之间移动数据?

谢谢。

【问题讨论】:

  • 我认为您在第一个代码中所做的是“将内容从 buffer2 移动到 buffer1”,而不是相反。
  • 感谢@jadkik94,已修复。

标签: python bytearray


【解决方案1】:

在我的电脑上,如下

buffer1[:] = buffer2

在 400 纳秒内复制一个 4KB 的缓冲区。换句话说,您每秒可以进行 250 万次这样的复制。

这是否足够快满足您的需求?

编辑:如果buffer2buffer1 短,并且您想将其内容复制到buffer1 中的特定位置而不更改目标缓冲区的其余部分,您可以使用以下内容:

buffer1[pos:pos+len(buffer2)] = buffer2

同样,您可以使用右侧的切片来仅复制buffer2 的一部分。

【讨论】:

  • 在 "a=bytearray([0,0,0]);b=bytearray([1,1]);a[:]=b;" 的情况下会发生什么丢失的字节去哪儿了?
  • @Lluis:嗯,你正在制作一个包含两个字节的缓冲区的副本。因此,结果也包含两个字节。
  • 这是我的问题。我不想复制 buffer2 而是将其内容移动到 buffer1。
  • 感谢您的编辑。我将使用 buffer1[:] = buffer2 选项。
  • 啊显然你是用memoryview做的:eli.thegreenplace.net/2011/11/28/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
相关资源
最近更新 更多