# Simple read() method around a bytearray class BytesBuffer(): def __init__(self, b): self.buf = b self.readCount = 0 def count(self): return self.readCount def reset_count(self): self.readCount = 0 def size(self): return len(self.buf) def peek(self): return self.buf[0] def write(self, b): # b should be castable to byte array self.buf += bytearray(b) def read(self, n): if len(self.buf) < n: print "reader err: buf less than n" # TODO: exception return self.readCount += n r = self.buf[:n] self.buf = self.buf[n:] return r # Buffer bytes off a tcp connection and read them off in chunks class ConnReader(): def __init__(self, conn): self.conn = conn self.buf = bytearray() # blocking def read(self, n): while n > len(self.buf): moreBuf = self.conn.recv(1024) if not moreBuf: raise IOError("dead connection") self.buf = self.buf + bytearray(moreBuf) r = self.buf[:n] self.buf = self.buf[n:] return r