public DeflateStream(Stream stream, CompressionMode mode, bool leaveOpen) { if (stream == null) throw new ArgumentNullException("stream"); switch (mode) { case CompressionMode.Decompress: if (!stream.CanRead) { throw new ArgumentException(SR.NotReadableStream, "stream"); } _inflater = CreateInflater(); break; case CompressionMode.Compress: if (!stream.CanWrite) { throw new ArgumentException(SR.NotWriteableStream, "stream"); } _deflater = CreateDeflater(null); break; default: throw new ArgumentException(SR.ArgumentOutOfRange_Enum, "mode"); } _stream = stream; _mode = mode; _leaveOpen = leaveOpen; _buffer = new byte[DefaultBufferSize]; }
public DeflateStream(Stream stream, CompressionMode mode, bool leaveOpen) { if (stream == null) { throw new ArgumentNullException("stream"); } switch (mode) { case CompressionMode.Decompress: if (!stream.CanRead) { throw new ArgumentException(SR.NotReadableStream, "stream"); } _inflater = CreateInflater(); break; case CompressionMode.Compress: if (!stream.CanWrite) { throw new ArgumentException(SR.NotWriteableStream, "stream"); } _deflater = CreateDeflater(null); break; default: throw new ArgumentException(SR.ArgumentOutOfRange_Enum, "mode"); } _stream = stream; _mode = mode; _leaveOpen = leaveOpen; _buffer = new byte[DefaultBufferSize]; }
protected override void Dispose(bool disposing) { try { PurgeBuffers(disposing); } finally { // Close the underlying stream even if PurgeBuffers threw. // Stream.Close() may throw here (may or may not be due to the same error). // In this case, we still need to clean up internal resources, hence the inner finally blocks. try { if (disposing && !_leaveOpen && _stream != null) { _stream.Close(); } } finally { _stream = null; try { if (deflater != null) { deflater.Dispose(); } if (inflater != null) { inflater.Dispose(); } } finally { inflater = null; deflater = null; base.Dispose(disposing); } } // finally } // finally } // Dispose
// Since a reader is being taken, CompressionMode.Decompress is implied internal DeflateStream(Stream stream, bool leaveOpen, IFileFormatReader reader) { Debug.Assert(reader != null, "The IFileFormatReader passed to the internal DeflateStream constructor must be non-null"); if (stream == null) throw new ArgumentNullException("stream"); if (!stream.CanRead) throw new ArgumentException(SR.NotReadableStream, "stream"); _inflater = CreateInflater(reader); _stream = stream; _mode = CompressionMode.Decompress; _leaveOpen = leaveOpen; _buffer = new byte[DefaultBufferSize]; }
public DeflateStream(Stream stream, CompressionMode mode, bool leaveOpen) { if (stream == null) { throw new ArgumentNullException("stream"); } if (CompressionMode.Compress != mode && CompressionMode.Decompress != mode) { throw new ArgumentException(SR.GetString(SR.ArgumentOutOfRange_Enum), "mode"); } _stream = stream; _mode = mode; _leaveOpen = leaveOpen; switch (_mode) { case CompressionMode.Decompress: if (!_stream.CanRead) { throw new ArgumentException(SR.GetString(SR.NotReadableStream), "stream"); } inflater = CreateInflater(); m_CallBack = new AsyncCallback(ReadCallback); break; case CompressionMode.Compress: if (!_stream.CanWrite) { throw new ArgumentException(SR.GetString(SR.NotWriteableStream), "stream"); } deflater = CreateDeflater(null); m_AsyncWriterDelegate = new AsyncWriteDelegate(this.InternalWrite); m_CallBack = new AsyncCallback(WriteCallback); break; } // switch (_mode) buffer = new byte[DefaultBufferSize]; }
// Since a reader is being taken, CompressionMode.Decompress is implied internal DeflateStream(Stream stream, bool leaveOpen, IFileFormatReader reader) { Debug.Assert(reader != null, "The IFileFormatReader passed to the internal DeflateStream constructor must be non-null"); if (stream == null) { throw new ArgumentNullException("stream"); } if (!stream.CanRead) { throw new ArgumentException(SR.NotReadableStream, "stream"); } _inflater = CreateInflater(reader); _stream = stream; _mode = CompressionMode.Decompress; _leaveOpen = leaveOpen; _buffer = new byte[DefaultBufferSize]; }
protected override void Dispose(bool disposing) { try { PurgeBuffers(disposing); } finally { // Close the underlying stream even if PurgeBuffers threw. // Stream.Close() may throw here (may or may not be due to the same error). // In this case, we still need to clean up internal resources, hence the inner finally blocks. try { if (disposing && !_leaveOpen && _stream != null) _stream.Dispose(); } finally { _stream = null; try { if (_deflater != null) _deflater.Dispose(); if (_inflater != null) _inflater.Dispose(); } finally { _deflater = null; _inflater = null; base.Dispose(disposing); } } // finally } // finally } // Dispose