예제 #1
0
        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);
        }
예제 #2
0
        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);
        }