'Read from the file.'

def Read(self, length):

    if self.progress_callback:
        self.progress_callback()
    available_to_read = max(0, ((self.size or 0) - self.offset))
    to_read = min(length, available_to_read)
    with FileHandleManager(self.filename) as fd:
        offset = (self.file_offset + self.offset)
        pre_padding = (offset % self.alignment)
        aligned_offset = (offset - pre_padding)
        fd.Seek(aligned_offset)
        data = fd.Read((to_read + pre_padding))
        self.offset += (len(data) - pre_padding)
        return data[pre_padding:]
