예제 #1
0
파일: IrosArc.cs 프로젝트: professorlust/7h
        private static DataRecord GetData(byte[] input, string filename, CompressType compress) {
            if (compress == CompressType.Nothing) {
                    return new DataRecord() { Data = input };
            }
            if (compress == CompressType.ByExtension && _noCompressExt.Contains(System.IO.Path.GetExtension(filename))) {
                return new DataRecord() { Data = input };
            }

            var cdata = new System.IO.MemoryStream();
            //Lzs.Encode(new System.IO.MemoryStream(input), cdata);
            byte[] lprops;
            using (var lzma = new SharpCompress.Compressors.LZMA.LzmaStream(new SharpCompress.Compressors.LZMA.LzmaEncoderProperties(), false, cdata)) {
                lzma.Write(input, 0, input.Length);
                lprops = lzma.Properties;
            }
            if (/*compress == CompressType.ByContent &&*/ (cdata.Length + lprops.Length + 8) > (input.Length * 10 / 8)) {
                return new DataRecord() { Data = input };
            }

            byte[] data = new byte[cdata.Length + lprops.Length + 8];
            Array.Copy(BitConverter.GetBytes(input.Length), data, 4);
            Array.Copy(BitConverter.GetBytes(lprops.Length), 0, data, 4, 4);
            Array.Copy(lprops, 0, data, 8, lprops.Length);
            cdata.Position = 0;
            cdata.Read(data, lprops.Length + 8, (int)cdata.Length);
            return new DataRecord() { Data = data, Compressed = true };
        }
예제 #2
0
        /// <summary>
        /// Compresses the specified data.
        /// </summary>
        /// <param name="data">The data.</param>
        protected byte[] Compress(byte[] data)
        {
            using var output = new MemoryStream();

            // compress data
            var encoderProperties = new SharpCompress.Compressors.LZMA.LzmaEncoderProperties(false, this.LzmaEncoderDictionarySize);

            using (var compressor = new SharpCompress.Compressors.LZMA.LzmaStream(encoderProperties, false, output))
            {
                // compressor flushes to output stream at dispose
                compressor.Write(data, 0, data.Length);
            }

            // return the compressed data
            return(output.ToArray());
        }