anchor.diff:        nextHeader = await _readHeader(rawHeader);
         if (nextHeader == null) {
           if (eofAcceptable) {
  -          _header = null;
  -          _contents = null;
  -          _listenedToContents = false;
  +          _current = null;
  +          _currentStreamNullOrComplete = true;
  +          _listenedToContentsOnce = false;
             _isReadingHeaders = false;
             return false;
           } else {
  
positive.code: /// individual file contents in order to minimize the amount of memory needed
  /// to read each archive where possible.
  @sealed
  class TarReader implements StreamIterator<TarHeader> {
    /// A chunked stream iterator to enable us to get our data.
    final ChunkedStreamIterator<int> _chunkedStream;
    final PaxHeaders _paxHeaders = PaxHeaders();
  
negative.code:   /// stream starts and resets it when it's done.
    Stream<List<int>> _publishStream(Stream<List<int>> stream, int length) {
      return Stream.eventTransformed(stream, (sink) {
        _listenedToContentsOnce = true;
  
        return _OutgoingStreamGuard(
          length,
          sink,
          // Reset state when the stream is done. This will only be called when
          // the sream is done, not when a listener cancels.
          () {
            _currentStreamNullOrComplete = true;
          },
        );
      });
  