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 && _stream != null) { _stream.Dispose(); } } finally { _stream = null !; _inflater = null !; base.Dispose(disposing); } } }
/// <summary> /// Sets up this DeflateManagedStream to be used for Inflation/Decompression /// </summary> internal void InitializeInflater(Stream stream, bool leaveOpen, IFileFormatReader reader = null, ZipArchiveEntry.CompressionMethodValues method = ZipArchiveEntry.CompressionMethodValues.Deflate, long uncompressedSize = -1) { Debug.Assert(stream != null); Debug.Assert(method == ZipArchiveEntry.CompressionMethodValues.Deflate64); if (!stream.CanRead) { throw new ArgumentException(SR.NotSupported_UnreadableStream, nameof(stream)); } _inflater = new InflaterManaged(reader, method == ZipArchiveEntry.CompressionMethodValues.Deflate64 ? true : false, uncompressedSize); _stream = stream; _leaveOpen = leaveOpen; _buffer = new byte[DefaultBufferSize]; }
// A specific constructor to allow decompression of Deflate64 internal DeflateManagedStream(Stream stream, ZipArchiveEntry.CompressionMethodValues method, long uncompressedSize = -1) { ArgumentNullException.ThrowIfNull(stream); if (!stream.CanRead) { throw new ArgumentException(SR.NotSupported_UnreadableStream, nameof(stream)); } Debug.Assert(method == ZipArchiveEntry.CompressionMethodValues.Deflate64); _inflater = new InflaterManaged(method == ZipArchiveEntry.CompressionMethodValues.Deflate64, uncompressedSize); _stream = stream; _buffer = new byte[DefaultBufferSize]; }
/// <summary> /// Sets up this DeflateManagedStream to be used for Inflation/Decompression /// </summary> internal void InitializeInflater(Stream stream, bool leaveOpen, IFileFormatReader reader = null, ZipArchiveEntry.CompressionMethodValues method = ZipArchiveEntry.CompressionMethodValues.Deflate) { Debug.Assert(stream != null); Debug.Assert(method == ZipArchiveEntry.CompressionMethodValues.Deflate || method == ZipArchiveEntry.CompressionMethodValues.Deflate64); if (!stream.CanRead) throw new ArgumentException(SR.NotSupported_UnreadableStream, nameof(stream)); _inflater = new InflaterManaged(reader, method == ZipArchiveEntry.CompressionMethodValues.Deflate64 ? true : false); _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); } } } }