Exemplo n.º 1
0
        public override int Read(byte[] buffer, int offset, int count)
        {
            if (_streamToCompress == null)
            {
                throw new ObjectDisposedException(typeof(ZipOutputStream).Name);
            }
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }
            if (offset < 0)
            {
                throw new ArgumentOutOfRangeException("offset", "Cannot be negative.");
            }
            if (count < 0)
            {
                throw new ArgumentOutOfRangeException("count", "Cannot be negative.");
            }
            if (offset + count > buffer.Length)
            {
                throw new ArgumentException("The sum of offset and count is greater than the byte array length.");
            }

            _bufferController = new BufferController(buffer, offset, count);
            _backlogs         = _bufferController.Append(_backlogs).ToList();
            while (_bufferController.Availability > 0 && !_eof)
            {
                var bytesRead = _streamToCompress.Read(_buffer, 0, _buffer.Length);
                if (bytesRead == 0)
                {
                    CompressedStream.CloseEntry();
                    CompressedStream.Close();
                    _eof = true;
                }
                else
                {
                    CompressedStream.Write(_buffer, 0, bytesRead);
                    CompressedStream.Flush();
                }
            }
            return(_bufferController.Count);
        }