'Public read interface.
Readers from this endpoint will receive a gzip file streamed from the infd.
Args:
length: How many bytes to read.
Returns:
A string.'

def Read(self, length=10000000):

    while (self.zipper and (self.buff_fd.len < length)):
        data = self.infd.read(min(self.remaining_bytes, self.BUFFER_SIZE))
        if ((not data) and self.zipper):
            self.zipper.flush()
            self.zipper.close()
            self.zipper = None
            break
        l = len(data)
        self.total_read += l
        self.remaining_bytes -= l
        for h in self.hashers.values():
            h.update(data)
        self.zipper.write(data)
    return self.buff_fd.ReadFromFront(length)
