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); }