Пример #1
0
        /// <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);
        }
Пример #2
0
        internal void CloseStream(MultipleSubStreamReader multiSubStreamReader)
        {
            if (_openReader != multiSubStreamReader)
            {
                throw new InvalidOperationException();
            }

            _openReader = null;
        }