public StreamDecompressor([NotNull] CompressorSettings settings, [NotNull] ILog log) { this.log = log ?? throw new ArgumentNullException(nameof(log)); this.settings = settings ?? throw new ArgumentNullException(nameof(settings)); gzipBlockSplitter = new GzipBlockSplitter( settings.MaxParallelDecompressionBufferSize, settings.ParallelDecompressionBufferSize, log); }
public void Should_split_to_blocks_when_compressed_without_length_in_header() { var contents = Enumerable.Range(0, 5).Select(x => x + " " + TestData.ShortFileContent.Shuffle()).ToArray(); var stream = contents.SelectMany(x => x.CompessWithDecompressionHelp(DecompressionHelpMode.NoDirtyHacks)) .ToArray().AsStream(); var gzipBlockSplitter = new GzipBlockSplitter(1.Kilobytes(), 1.Kilobytes(), log); var splitBlocks = gzipBlockSplitter.SplitBlocks(stream).ToArray(); splitBlocks.Should().HaveCount(5).And.AllBeAssignableTo <IndependentGzipBlock>(); var decompressedBlocks = splitBlocks.OfType <IndependentGzipBlock>().Select(x => x.Decompress().AsString()).ToArray(); decompressedBlocks.Should().BeEquivalentTo(contents); }
public void Should_split_to_blocks_when_compressed_with_length_but_blocks_is_greater_than_limits() { var contents = Enumerable.Range(0, 5).Select(x => x + " " + TestData.ShortFileContent.Shuffle()).ToArray(); var expectedText = contents.JoinStrings(); var stream = contents.SelectMany(x => x.CompessWithDecompressionHelp(DecompressionHelpMode.NoDirtyHacks)) .ToArray().AsStream(); var gzipBlockSplitter = new GzipBlockSplitter(11, 11, log); var splitBlocks = gzipBlockSplitter.SplitBlocks(stream).ToArray(); splitBlocks.Should().HaveCount(1).And.AllBeAssignableTo <StreamingGzipBlock>(); var outputStream = new MemoryStream(); splitBlocks.First().As <StreamingGzipBlock>().WriteDecompressedDataTo(outputStream); outputStream.ToArray().AsString().Should().Be(expectedText); }