2012-05-17 3 views
6

Ho due buffer di rete definita come:Come copiare un buffer bytearray python?

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

Qual è il modo più veloce per spostare i contenuti da buffer2 a buffer1 senza allocare memoria aggiuntiva?

Il modo più semplice sarebbe quello di fare:

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

A quanto pare se lo faccio buffer1[:]=buffer2[:] pitone sposta il contenuto, ma non sono sicuro al 100% di essa, perché se lo faccio:

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

quindi len(a)=2. Cosa succede con il byte mancante? Qualcuno può spiegare come funziona o come spostare i dati tra i buffer?

Grazie.

+0

Penso che quello che stai facendo nel tuo primo codice è "sposta il contenuto da buffer2 a buffer1", non il contrario. – jadkik94

+0

grazie @ jadkik94, corretto. – josgek

risposta

6

Sul mio computer, il seguente

buffer1[:] = buffer2 

copie di un buffer di 4 KB in meno di 400 nanosecondi. In altre parole, puoi fare 2,5 milioni di copie al secondo.

È abbastanza veloce per le vostre esigenze?

edit: Se buffer2 è più corto buffer1, e si desidera copiare il suo contenuto in una particolare posizione in buffer1senza modificare il resto del buffer di destinazione, è possibile utilizzare il seguente:

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

Analogamente, è possibile utilizzare l'affettatura sul lato destro per copiare solo una parte di buffer2.

+0

Cosa succede poi nel caso in cui "a = bytearray ([0,0,0]); b = bytearray ([1,1]); a [:] = b;" Dove va il byte mancante? – josgek

+0

@Lluis: Beh, stai facendo una copia di un buffer che contiene due byte. Pertanto il risultato contiene anche due byte. – NPE

+0

Questo è il mio problema. Non voglio fare una copia di buffer2 ma spostare i suoi contenuti su buffer1. – josgek