Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="LzmaStream" /> class.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="compressionMode">The compression mode.</param>
        /// <param name="compressionParameters">The compression parameters.</param>
        /// <param name="ownsStream">if set to <c>true</c> [owns stream].</param>
        /// <param name="bufferSize">Size of the buffer.</param>
        /// <exception cref="ArgumentOutOfRangeException">compressionMode - null</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">compressionMode - null</exception>
        private LzmaStream(Stream stream, CompressionMode compressionMode, LzmaCompressionParameters compressionParameters = null,
                           bool ownsStream = true, int bufferSize = 1 << 20)
        {
            _innerStream = stream;
            _ownsStream  = ownsStream;
            _pipeStream  = new PipeStream(bufferSize);
            switch (compressionMode)
            {
            case CompressionMode.Compress:
                CanWrite     = true;
                _coderThread = StartThread(() => CreateEncoder(_innerStream, compressionParameters).Code(_pipeStream, _innerStream, -1, -1, null),
                                           "LZMA compress");
                break;

            case CompressionMode.Decompress:
                CanRead      = true;
                _coderThread = StartThread(() =>
                {
                    var decoder     = CreateDecoder(_innerStream, out var length);
                    var inputLength = _innerStream.CanSeek ? _innerStream.Length : -1;
                    decoder.Code(_innerStream, _pipeStream, inputLength, length, null);
                    _pipeStream.Dispose();
                },
                                           "LZMA decompress");
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(compressionMode), compressionMode, null);
            }
        }
Example #2
0
        private static ICoder CreateEncoder(Stream innerStream, LzmaCompressionParameters compressionParameters)
        {
            var encoder = new Encoder();

            compressionParameters.SetEncoderProperties(encoder);
            encoder.WriteCoderProperties(innerStream);
            innerStream.WriteLong(-1);
            return(encoder);
        }
Example #3
0
 public LzmaStream(Stream stream, LzmaCompressionParameters compressionParameters, bool ownsStream = true, int bufferSize = 1 << 20)
     : this(stream, CompressionMode.Compress, compressionParameters, ownsStream, bufferSize)
 {
 }