Example #1
0
        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);
        }
Example #3
0
        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();
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }