public override void Write(System.Byte[] buffer, int offset, int count) { // workitem 7159 // calculate the CRC on the unccompressed data (before writing) if (crc != null) { crc.SlurpBlock(buffer, offset, count); } if (_streamMode == StreamMode.Undefined) { _streamMode = StreamMode.Writer; } else if (_streamMode != StreamMode.Writer) { throw new ZlibException("Cannot Write after Reading."); } if (count == 0) { return; } // first reference of z property will initialize the private var _z z.InputBuffer = buffer; _z.NextIn = offset; _z.AvailableBytesIn = count; bool done = false; do { _z.OutputBuffer = workingBuffer; _z.NextOut = 0; _z.AvailableBytesOut = _workingBuffer.Length; int rc = (_wantCompress) ? _z.Deflate(_flushMode) : _z.Inflate(_flushMode); if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) { throw new ZlibException((_wantCompress ? "de" : "in") + "flating: " + _z.Message); } //if (_workingBuffer.Length - _z.AvailableBytesOut > 0) _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0; // If GZIP and de-compress, we're done when 8 bytes remain. if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress) { done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); } }while (!done); }
public override void Write(byte[] buffer, int offset, int count) { if (crc != null) { crc.SlurpBlock(buffer, offset, count); } if (_streamMode == StreamMode.Undefined) { _streamMode = StreamMode.Writer; } else if (_streamMode != 0) { throw new ZlibException("Cannot Write after Reading."); } if (count == 0) { return; } z.InputBuffer = buffer; _z.NextIn = offset; _z.AvailableBytesIn = count; bool flag = false; while (true) { _z.OutputBuffer = workingBuffer; _z.NextOut = 0; _z.AvailableBytesOut = _workingBuffer.Length; int num = (!_wantCompress) ? _z.Inflate(_flushMode) : _z.Deflate(_flushMode); if (num != 0 && num != 1) { break; } _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); flag = (_z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0); if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress) { flag = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); } if (flag) { return; } } throw new ZlibException(((!_wantCompress) ? "in" : "de") + "flating: " + _z.Message); }