Example #1
0
        private void CompressorAction(
            string inputFile,
            string outputFile,
            IBlockWorker <ByteBlock> blockReader,
            IBlockCompressor <ByteBlock> blockCompressor,
            IBlockWorker <ByteBlock> blockWriter)
        {
            var inputQueue  = new SharedQueue <ByteBlock>(new SimpleQueue <ByteBlock>(), _inputQueueSize);
            var outputQueue = new SharedQueue <ByteBlock>(new SortedQueue <ByteBlock>(), _outputQueueSize, _compressorsNumber);

            using (var inputStream = File.Open(Path.GetFullPath(inputFile), FileMode.Open, FileAccess.Read))
            {
                ThreadStarter.StartThread(() => blockReader.Start(inputStream, inputQueue));

                foreach (var _ in Enumerable.Range(0, _compressorsNumber))
                {
                    ThreadStarter.StartThread(() => blockCompressor.Start(inputQueue, outputQueue));
                }

                using (var outputStream = File.Open(Path.GetFullPath(outputFile), FileMode.Create, FileAccess.Write))
                {
                    blockWriter.Start(outputStream, outputQueue);
                }
            }
        }
Example #2
0
        public Program(IFileSystem fileSystem, IInputSystem inputSystem, IBlockCompressor blockCompressor)
        {
            AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;

            _fileSystem      = fileSystem;
            _inputSystem     = inputSystem;
            _blockCompressor = blockCompressor;
        }
Example #3
0
 public Core(IArgumentsResolver argumentsResolver,
             IFileReader uncompressedFileReader,
             IBlockCompressor blockCompressor,
             IFileWriter fileWriter)
 {
     _argumentsResolver      = argumentsResolver;
     _uncompressedFileReader = uncompressedFileReader;
     _blockCompressor        = blockCompressor;
     _fileWriter             = fileWriter;
 }
Example #4
0
        public MultithreadFileCompressor(IBlockCompressor blockCompressor, IBlockStreamWriter blockWriter, IBlockStreamReader blockReader,
                                         int threadsCount = 15, int blockLen = (1024 * 1024) *10)
        {
            _blockCompressor = blockCompressor;
            _blockReader     = blockReader;
            _blockWriter     = blockWriter;
            _blockLen        = blockLen;
            _threadsCount    = threadsCount;

            _currentReadIndex = 0;
            _readedBlocks     = new ConcurrentBlockStack();
            _compressedBlocks = new ConcurrentBlockStack();
        }