/// <summary> /// Gets the next stream. /// </summary> /// <returns>The next substream</returns> /// <exception cref="InvalidOperationException">The previous stream is still open</exception> public Stream GetNextStream() { if (_openReader != null) { throw new InvalidOperationException(); } else if (_next >= _items.Count) { return(null); } MultiStreamItemHeader header = _items[_next++]; MultipleSubStreamReader reader = new MultipleSubStreamReader(this, BaseStream, header); Stream s = reader; if (0 != (header.ItemType & MultiStreamItemHeader.AssuredFlag)) { s = new AssuredSubStream(s, _verificationMode); } if (0 != (header.ItemType & MultiStreamItemHeader.ZippedFlag)) { s = new ZLibSubStream(s, System.IO.Compression.CompressionMode.Decompress); } _openReader = reader; return(s); }
internal void CloseStream(MultipleSubStreamReader multiSubStreamReader) { if (_openReader != multiSubStreamReader) { throw new InvalidOperationException(); } _openReader = null; }