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 }; }
/// <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()); }