mit bytearray mit sockel.recv_into
Ich bin dabei einige socket-E /a, und mit einem bytearray-Objekt, das als Puffer. Ich möchte Daten mit einem offset in diesem Puffer mit csock.recv_into, wie unten gezeigt, um zu vermeiden, Vermittler von string-Objekten. Leider scheint es bytearrays können nicht so genutzt werden, und der code unten funktioniert nicht.
buf = bytearray(b" " * toread)
read = 0
while(toread):
nbytes = csock.recv_into(buf[read:],toread)
toread -= nbytes
read += nbytes
So, stattdessen bin ich mit dem nachstehenden code, die hat Verwendung eines temporären string (und funktioniert)...
buf = bytearray(b" " * toread)
read = 0
while(toread):
tmp = csock.recv(toread)
nbytes = len(tmp)
buf[read:] = tmp
toread -= nbytes
read += nbytes
Gibt es eine elegantere Möglichkeit, das zu tun, erfordert nicht kopieren intermediate Schnüre um?
- Welche Fehler sind Sie immer? Welche version von Python benutzt du (genau)? bugs.python.org/issue7827 lässt vermuten, dass dieses Problem behoben ist, da der Python-2.7.2.
- python-version 2.7.3. Und dies bezieht sich nicht auf den Fehler... csock.recv_into(buf) funktioniert gut für mich. Was nicht möglich ist, es zu benutzen wie diese: csock.recv_into(buf[gelesen:]), da dann das original buf-Objekt nicht aktualisiert werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
memoryview
zu wickeln Sie Ihrebytearray
: