Sto facendo un po 'di socket IO e usando un oggetto bytearray come buffer. Vorrei ricevere dati con un offset in questo buffer usando csock.recv_into come mostrato di seguito per evitare di creare oggetti stringa intermediari. Sfortunatamente, sembra che non sia possibile utilizzare bytearrays in questo modo, e il codice sottostante non funziona.utilizzando bytearray con socket.recv_into
buf = bytearray(b" " * toread)
read = 0
while(toread):
nbytes = csock.recv_into(buf[read:],toread)
toread -= nbytes
read += nbytes
Così, invece io sto usando il codice qui sotto, che fa usare una stringa temporanea (e lavora) ...
buf = bytearray(b" " * toread)
read = 0
while(toread):
tmp = csock.recv(toread)
nbytes = len(tmp)
buf[read:] = tmp
toread -= nbytes
read += nbytes
c'è un più elegante modo per farlo che doesn' t richiedono di copiare stringhe intermedie in giro?
Qual è l'errore hai trovato? Quale versione di Python stai usando (esattamente)? http://bugs.python.org/issue7827 suggerisce che questo sia corretto a partire da Python 2.7.2. – nneonneo
versione python è 2.7.3. E questo non è legato a quel bug ... csock.recv_into (buf) funziona bene per me. Ciò che non è possibile è usarlo in questo modo: csock.recv_into (buf [leggi:]) come allora l'oggetto buf originale non viene aggiornato. – cyann