示例#1
0
        public byte[] Decompress(BrutePackBlock block)
        {
            var memStream      = new MemoryStream(block.BlockData);
            var reader         = new BinaryReader(memStream);
            var decompressProg = reader.ReadString();

            var split        = decompressProg.Split(new[] { ' ' }, 2);
            var processStart = new ProcessStartInfo(split[0], split.Length > 1 ? split[1] : "")
            {
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false
            };
            var cproc = Process.Start(processStart);

            if (cproc == null)
            {
                throw new InvalidProgramException();
            }

            var writeTask = cproc.StandardInput.BaseStream.WriteAsync(block.BlockData, (int)memStream.Position, block.BlockData.Length - (int)memStream.Position);

            writeTask.ContinueWith(_ => cproc.StandardInput.BaseStream.Close());

            var memOutput = new MemoryStream();
            var readTask  = cproc.StandardOutput.BaseStream.CopyToAsync(memOutput);

            writeTask.Wait();
            readTask.Wait();

            return(memOutput.ToArray());
        }
        public byte[] Decompress(BrutePackBlock block)
        {
            var input  = new MemoryStream(block.BlockData, 0, block.BlockData.Length);
            var output = new MemoryStream();

            GZipDecompressor.Decompress(input, output);
            return(output.ToArray());
        }
示例#3
0
        private static BrutePackBlock MakeTestBlock(int sizeMultiplier = 1)
        {
            var block = new BrutePackBlock(BlockType.Uncompressed, new byte[TestBlockSize * sizeMultiplier]);

            for (int i = 0; i < TestBlockSize * sizeMultiplier; i++)
            {
                block.BlockData[i] = (byte)(i * 5);
            }
            return(block);
        }
示例#4
0
        public static byte[] Decompress(BrutePackBlock block)
        {
            IDecompressionProvider decomp;

            if (!typeToProvider.TryGetValue(block.BlockType, out decomp))
            {
                throw new ApplicationException("Unknown block type: " + block.BlockType);
            }
            return(decomp.Decompress(block));
        }
 public byte[] Decompress(BrutePackBlock block)
 {
     return(ArithmeticCoder.DecodeBlockStream(new MemoryStream(block.BlockData)));
 }
 public byte[] Decompress(BrutePackBlock block)
 {
     return(block.BlockData);
 }