示例#1
0
        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];
        }
示例#2
0
        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];
        }
示例#3
0
        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
示例#4
0
        // 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];
        }
示例#5
0
        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];
        }
示例#6
0
        // 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];
        }
示例#7
0
        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