public static byte[] Decompress(byte[] data, InfoByte.CompressionType comprUsed) { byte[] dcd = new byte[0]; try { switch (comprUsed) { case InfoByte.CompressionType.Arithmetic: AbstractModel ac = new ModelOrder0(); using (MemoryStream msd = new MemoryStream()) { using (MemoryStream min = new MemoryStream(data)) { min.Flush(); min.Position = 0; ac.Process(min, msd, ModeE.MODE_DECODE); msd.Flush(); dcd = msd.ToArray(); } } break; case InfoByte.CompressionType.BZIP2: using (MemoryStream msOut = new MemoryStream(data)) { byte[] blen = new byte[4]; msOut.Read(blen, 0, 4); int len = BitConverter.ToInt32(blen, 0); using (BZip2InputStream d = new BZip2InputStream(msOut)) { dcd = new byte[len]; d.Read(dcd, 0, dcd.Length); } } break; case InfoByte.CompressionType.LZMA: return(SevenZipHelper.Decompress(data)); case InfoByte.CompressionType.None: return(data); } } catch {} return(dcd); }
private static byte[] internalCompress(byte[] data, InfoByte.CompressionType algo = InfoByte.CompressionType.Arithmetic) { byte[] dataCompr = new byte[0]; switch (algo) { case InfoByte.CompressionType.LZMA: default: dataCompr = SevenZipHelper.Compress(data); break; case InfoByte.CompressionType.BZIP2: using (MemoryStream msOut = new MemoryStream()) { msOut.Write(BitConverter.GetBytes(data.Length), 0, 4); using (ParallelBZip2OutputStream c = new ParallelBZip2OutputStream(msOut, 9, true)) { c.MaxWorkers = 4; c.Write(data, 0, data.Length); c.Flush(); c.Close(); msOut.Flush(); dataCompr = msOut.ToArray(); } } break; case InfoByte.CompressionType.Arithmetic: AbstractModel ac = new ModelOrder0(); //data = threeRLEencode(data); using (MemoryStream mcCompr = new MemoryStream()) { ac.Process(new MemoryStream(data), mcCompr, ModeE.MODE_ENCODE); mcCompr.Flush(); dataCompr = mcCompr.ToArray(); } //dataCompr = threeRLEencode(dataCompr); break; } return(dataCompr); }