/// <summary>
        /// Compression of a block method that is used as callback for <see cref="CollectionProcessorThreadPool{T}"/>
        /// </summary>
        /// <param name="block">Processing block</param>
        protected override void ProcessBlock(ByteBlock block)
        {
            if (block == null || IsAborted)
            {
                return;
            }

            using (var memoryStream = new MemoryStream())
            {
                using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress))
                {
                    gZipStream.Write(block.Buffer, 0, block.Buffer.Length);
                }

                var compressedBlock = memoryStream.ToArray().AddByteBlockLengthHeader();
                OutputBlocks.Add(block.BlockNumber, compressedBlock);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Decompression of a block method that is used as callback for <see cref="CollectionProcessorThreadPool{T}"/>
        /// </summary>
        /// <param name="block">Processing block</param>
        protected override void ProcessBlock(ByteBlock block)
        {
            if (block == null || IsAborted)
            {
                return;
            }

            using (var memoryStream = new MemoryStream(block.Buffer))
            {
                var decompressedBlock = block.IsLast ? new byte[OriginalLastBlockLength] : new byte[OriginalBlockSize];

                using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
                {
                    gZipStream.Read(decompressedBlock, 0, decompressedBlock.Length);
                }

                OutputBlocks.Add(block.BlockNumber, decompressedBlock);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Writes to a destination file
        /// </summary>
        /// <param name="destinationFileInfo">Destination file</param>
        protected override void WriteToDestination(FileInfo destinationFileInfo)
        {
            using (var fileStream = new FileStream(destinationFileInfo.FullName, FileMode.Create))
            {
                var nextBlockNumber = 0;

                while (!IsAborted)
                {
                    var result = OutputBlocks.TryTakeAndRemove(nextBlockNumber, out var block, true);

                    if (!result)
                    {
                        break;
                    }

                    nextBlockNumber++;
                    fileStream.Write(block, 0, block.Length);
                }
            }
        }
Ejemplo n.º 4
0
 public override int GetHashCode()
 {
     unchecked
     {
         return(((Header != null ? Header.GetHashCode() : 0) * 397) ^ (OutputBlocks != null ? OutputBlocks.GetHashCode() : 0));
     }
 }