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