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); } } }
public Program(IFileSystem fileSystem, IInputSystem inputSystem, IBlockCompressor blockCompressor) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; _fileSystem = fileSystem; _inputSystem = inputSystem; _blockCompressor = blockCompressor; }
public Core(IArgumentsResolver argumentsResolver, IFileReader uncompressedFileReader, IBlockCompressor blockCompressor, IFileWriter fileWriter) { _argumentsResolver = argumentsResolver; _uncompressedFileReader = uncompressedFileReader; _blockCompressor = blockCompressor; _fileWriter = fileWriter; }
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(); }