2012-05-17 21 views
6

私はとして定義された2つのネットワーク・バッファがあります余分なメモリを割り当てることなくbuffer2からbuffer1にコンテンツを移動するための最速の方法ですPython bytearrayバッファをコピーするには?

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

を?

素朴な方法は何をするだろう:

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。欠けているバイトはどうなりますか?誰がどのようにこの作品やバッファ間のデータを移動する方法を説明することができますか?

ありがとうございました。私のコンピュータ上で

+0

私はあなたの最初のコードで何をしていると思いますが、「バッファー2からバッファー1へのコンテンツの移動」ではなく、逆です。 – jadkik94

+0

ありがとう@ jadkik94、修正されました。 – josgek

答えて

6

、以下

buffer1[:] = buffer2 

コピー400ナノ秒の下で4KBのバッファ。つまり、1秒間に250万回のコピーを作成できます。

あなたのニーズに十分に速いのですか?

編集:buffer2buffer1よりも短くなっている、とあなたがターゲットバッファの残りの部分を変更することなく、buffer1内の特定の位置で、その内容をコピーしたい場合は、以下を使用することができます。

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

同様に、右側のスライスを使用して、buffer2の一部のみをコピーすることができます。

+0

"a = bytearray([0,0,0]); b = bytearray([1,1]); a [:] = b;"欠けているバイトはどこに行きますか? – josgek

+0

@Lluis:まあ、あなたは2バイトを含むバッファのコピーを作っています。したがって、結果には2バイトも含まれます。 – NPE

+0

それは私の問題です。私はbuffer2のコピーを作成するのではなく、その内容をbuffer1に移動したいと思います。 – josgek

関連する問題