Пример #1
0
 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);
 }
Пример #2
0
            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);
            }
Пример #3
0
            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);
            }