code: def Read(self, length=None):
      
  
      if self.progress_callback:
        self.progress_callback()
  
      available_to_read = max(0, (self.size or 0) - self.offset)
      if length is None:
        to_read = available_to_read
      else:
        to_read = min(length, available_to_read)
  
      with FileHandleManager(self.filename) as fd:
        offset = self.file_offset + self.offset
        pre_padding = offset % self.alignment
  
        # Due to alignment we read some more data than we need to.
        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:]
docs: Read from the file.