/// <inheritdoc />
        public byte[] Compress(byte[] data, Action <double> progressFunc = null)
        {
            CoderPropID[] propIDs =
            {
                CoderPropID.DictionarySize,
                CoderPropID.PosStateBits,
                CoderPropID.LitContextBits,
                CoderPropID.LitPosBits,
                CoderPropID.Algorithm,
                CoderPropID.NumFastBytes,
                CoderPropID.MatchFinder,
                CoderPropID.EndMarker
            };
            object[] properties =
            {
                1 << 23,
                    2,
                    3,
                    0,
                    2,
                    128,
                    "bt4",
                    false
            };

            var x       = new MemoryStream();
            var encoder = new Encoder();

            encoder.SetCoderProperties(propIDs, properties);
            encoder.WriteCoderProperties(x);

            var length = BitConverter.GetBytes(data.Length);

            if (!BitConverter.IsLittleEndian)
            {
                Array.Reverse(length);
            }

            // Store 4 byte length value (little-endian)
            x.Write(length, 0, sizeof(int));

            ICodeProgress progress = null;

            if (progressFunc != null)
            {
                progress = new CompressionLogger(progressFunc, data.Length);
            }
            encoder.Code(new MemoryStream(data), x, -1, -1, progress);

            return(x.ToArray());
        }
Beispiel #2
0
        /// <inheritdoc />
        public byte[] Compress(byte[] data, Action <double> progressFunc = null)
        {
            CoderPropID[] propIDs =
            {
                CoderPropID.DictionarySize,
                CoderPropID.PosStateBits,
                CoderPropID.LitContextBits,
                CoderPropID.LitPosBits,
                CoderPropID.Algorithm,
                CoderPropID.NumFastBytes,
                CoderPropID.MatchFinder,
                CoderPropID.EndMarker
            };
            object[] properties =
            {
                1 << 23,
                    2,
                    3,
                    0,
                    2,
                    128,
                    "bt4",
                    false
            };

            var x       = new MemoryStream();
            var encoder = new Encoder();

            encoder.SetCoderProperties(propIDs, properties);
            encoder.WriteCoderProperties(x);
            Int64 fileSize;

            fileSize = data.Length;
            for (var i = 0; i < 8; i++)
            {
                x.WriteByte((Byte)(fileSize >> (8 * i)));
            }

            ICodeProgress progress = null;

            if (progressFunc != null)
            {
                progress = new CompressionLogger(progressFunc, data.Length);
            }

            encoder.Code(new MemoryStream(data), x, -1, -1, progress);

            return(x.ToArray());
        }
        /// <inheritdoc />
        public byte[] Compress(byte[] data, Action<double> progressFunc = null)
        {
            CoderPropID[] propIDs = {
                CoderPropID.DictionarySize,
                CoderPropID.PosStateBits,
                CoderPropID.LitContextBits,
                CoderPropID.LitPosBits,
                CoderPropID.Algorithm,
                CoderPropID.NumFastBytes,
                CoderPropID.MatchFinder,
                CoderPropID.EndMarker
            };
            object[] properties = {
                1 << 23,
                2,
                3,
                0,
                2,
                128,
                "bt4",
                false
            };

            var x = new MemoryStream();
            var encoder = new Encoder();
            encoder.SetCoderProperties(propIDs, properties);
            encoder.WriteCoderProperties(x);
            Int64 fileSize;
            fileSize = data.Length;
            for (int i = 0; i < 8; i++)
                x.WriteByte((Byte)(fileSize >> (8 * i)));

            ICodeProgress progress = null;
            if (progressFunc != null)
                progress = new CompressionLogger(progressFunc, data.Length);
            encoder.Code(new MemoryStream(data), x, -1, -1, progress);

            return x.ToArray();
        }