public static IEnumerable <ArraySegment <byte> > CompressIntoBlocksWith(this string text, int readBufferSize, IBlockCompression blockCompression) { using (var memoryStream = text.AsStream()) { foreach (var bytes in memoryStream.SpitToBytes(readBufferSize)) { var block = new Block(bytes, memoryStream.Position); var compressed = blockCompression.Compress(block); yield return(compressed.Bytes); } } }
private IWorkerTask RunEnqueueingInputFileBlockCompression( Stream inputStream, long offset, BlockingTasksQueue tasksQueue) { return(new DelegateWorkerTask( "reader", () => { try { var inputFile = new InputFile(inputStream); var readBlocks = inputFile.ReadBlocks(settings.InputFileReadingBufferSize, offset); foreach (var(block, error) in readBlocks) { if (error.HasValue) { throw new CompressorException(error.Value); } var task = new DelegateTask(offset.ToString(), () => compression.Compress(block)); tasksQueue.EnqueueTask(task); offset = block.Offset; } }