def read(self, num_bytes):
while len(self.decoded) < num_bytes:<EOL><INDENT>try:<EOL><INDENT>tag, data = next(self.chunks)<EOL><DEDENT>except StopIteration:<EOL><INDENT>raise EOFError()<EOL><DEDENT>if tag != b'<STR_LIT>':<EOL><INDENT>continue<EOL><DEDENT>self.decoded += self.decompressor.decompress(data)<EOL><DEDENT>r = self.decoded[:num_bytes]<EOL>self.decoded = self.decoded[num_bytes:]<EOL>return r<EOL>
Read `num_bytes` from the compressed data chunks.

        Data is returned as `bytes` of length `num_bytes`

        Will raise an EOFError if data is unavailable.

        Note: Will always return `num_bytes` of data (unlike the file read method).