code: def _AnalyzeDataStream(self, mediator, file_entry, data_stream_name):
      
      display_name = mediator.GetDisplayName()
      logger.debug('[AnalyzeDataStream] analyzing file: {0:s}'.format(
          display_name))
  
      if self._processing_profiler:
        self._processing_profiler.StartTiming('analyzing')
  
      try:
        file_object = file_entry.GetFileObject(data_stream_name=data_stream_name)
        if not file_object:
          raise RuntimeError((
              'Unable to retrieve file-like object for file entry: '
              '{0:s}.').format(display_name))
  
        try:
          self._AnalyzeFileObject(mediator, file_object)
        finally:
          file_object.close()
  
      finally:
        if self._processing_profiler:
          self._processing_profiler.StopTiming('analyzing')
  
      logger.debug(
          '[AnalyzeDataStream] completed analyzing file: {0:s}'.format(
              display_name))
docs: Analyzes the contents of a specific data stream of a file entry.
  
      The results of the analyzers are set in the parser mediator as attributes
      that are added to produced event objects. Note that some file systems
      allow directories to have data streams, e.g. NTFS.
  
      Args:
        mediator (ParserMediator): mediates the interactions between
            parsers and other components, such as storage and abort signals.
        file_entry (dfvfs.FileEntry): file entry whose data stream is to be
            analyzed.
        data_stream_name (str): name of the data stream.
  
      Raises:
        RuntimeError: if the file-like object cannot be retrieved from
            the file entry.