public static byte[] Compress(this byte[] buffer) { MemoryStream inputStream = new MemoryStream(buffer); MemoryStream outputStream = new MemoryStream(buffer.Length / 8); LZMAEncoder = new Encoder(); byte[] properties = LZMAEncoder.getCoderProperties(); try { LZMAEncoder.Code(inputStream, outputStream, buffer.Length, buffer.Length / 8, null); } catch (Exception e) { throw new Exception(e.Message); } byte[] compressedData = outputStream.ToArray(); int size = 17 + compressedData.Length; using (MemoryStream finalStream = new MemoryStream(size)) { ///Check if compression got worse if did return original value if (size > buffer.Length) return buffer; finalStream.Write(LZMAID); finalStream.Write(buffer.Length); finalStream.Write(compressedData.Length); finalStream.Write(properties); finalStream.Write(compressedData); return finalStream.ToArray(); } }