'Read data.
@def read(bytes=0)
:param bytes: Number of bytes to read. If omitted or zero,
read until end of region.
:returns: An 8-bit string.'

def read(self, n=0):

    if n:
        n = min(n, (self.length - self.pos))
    else:
        n = (self.length - self.pos)
    if (not n):
        return ''
    self.pos = (self.pos + n)
    return self.fh.read(n)
