public void TestCompressionWithConfig(ExternalCompressorConfig externalCompressorConfig, bool checkReduction) { var catCompressionConfig = externalCompressorConfig; var strategy = new ExternalCompressionStrategy(catCompressionConfig); var data = new byte[TestBlockSize]; for (int i = 0; i < TestBlockSize; i++) { data[i] = (byte)(i * 5); } var memStream = new MemoryStream(); var compressingStream = new BruteCompressingStream(new BinaryWriter(memStream), 65000, strategy); compressingStream.Write(data, 0, TestBlockSize); compressingStream.Flush(); if (checkReduction) { Assert.Less(memStream.Position, TestBlockSize); Console.WriteLine("Compressed {0} to {1} ({2}%)", TestBlockSize, memStream.Position, memStream.Position * 100 / TestBlockSize); } memStream.Seek(0, SeekOrigin.Begin); var decompressingStream = new BruteUncompressingStream(new BinaryReader(memStream)); var decompressingReader = new BinaryReader(decompressingStream); var readBlock = decompressingReader.ReadBytes(TestBlockSize); Assert.AreEqual(data, readBlock); }
public void TestCompressionWithConfig(int size) { var strategy = new ArithmeticCodingStrategy(size); var data = new byte[TestBlockSize]; for (int i = 0; i < TestBlockSize; i++) { data[i] = (byte)(i * 128 + 1); } var memStream = new MemoryStream(); var compressingStream = new BruteCompressingStream(new BinaryWriter(memStream), TestBlockSize, strategy); compressingStream.Write(data, 0, TestBlockSize); compressingStream.Flush(); memStream.Seek(0, SeekOrigin.Begin); var decompressingStream = new BruteUncompressingStream(new BinaryReader(memStream)); var decompressingReader = new BinaryReader(decompressingStream); var readBlock = decompressingReader.ReadBytes(TestBlockSize); Assert.AreEqual(data, readBlock); }
public static void Main(string[] args) { var brutePackMain = new BrutePackMain(); if (!Parser.Default.ParseArguments(args, brutePackMain)) { return; } var inputFile = brutePackMain.InputFile; var outputFile = brutePackMain.OutputFile; var decompress = brutePackMain.Decompress; if (outputFile == "") { GenerateOutputFilename(inputFile, decompress, out outputFile); } if (!decompress) { if (brutePackMain.ConfigFile.NullOrEmpty() && brutePackMain.ConfigString.NullOrEmpty()) { Console.WriteLine("You must specify -c or -f for compression"); return; } } var inputStream = new FileStream(inputFile, FileMode.Open); var outputStream = new FileStream(outputFile, FileMode.CreateNew); if (decompress) { using (var uncompressStream = new BruteUncompressingStream(new BinaryReader(inputStream))) uncompressStream.CopyTo(outputStream); outputStream.Flush(); outputStream.Close(); } else { var configString = brutePackMain.ConfigFile.NullOrEmpty() ? brutePackMain.ConfigString : File.ReadAllText(brutePackMain.ConfigFile); var parsedConfig = StrategyConfigParser.ParseConfig(configString) .Concat(Enumerable.Repeat <ICompressionStrategy>(new DumbCompressionStrategy(), 1)); var compressingStream = new BruteCompressingStream(new BinaryWriter(outputStream), brutePackMain.MaxBufferSize, new BruteCompressionStrategy(parsedConfig)); inputStream.CopyTo(compressingStream); compressingStream.Flush(); compressingStream.Close(); } }
public void TestUncompressStream() { var block = MakeTestBlock(); var memStream = new MemoryStream(TestBlockSize + 3); var writer = new BinaryWriter(memStream); writer.WriteBrutePackBlock(block); memStream.Seek(0, SeekOrigin.Begin); var uncompressStream = new BruteUncompressingStream(new BinaryReader(memStream)); var uncompressReader = new BinaryReader(uncompressStream); var readBytes = uncompressReader.ReadBytes(TestBlockSize); Assert.AreEqual(readBytes, block.BlockData); }
public void TestUncompressStreamManyLargeBlocks() { var block = MakeTestBlock(100); var memStream = new MemoryStream(); var writer = new BinaryWriter(memStream); writer.WriteBrutePackBlock(block); writer.WriteBrutePackBlock(block); memStream.Seek(0, SeekOrigin.Begin); var uncompressStream = new BruteUncompressingStream(new BinaryReader(memStream)); var uncompressReader = new BinaryReader(uncompressStream); var readBytes = uncompressReader.ReadBytes(TestBlockSize * 200); Assert.AreEqual(readBytes.Take(TestBlockSize * 100).ToArray(), block.BlockData); Assert.AreEqual(readBytes.Skip(TestBlockSize * 100).Take(TestBlockSize * 100).ToArray(), block.BlockData); }