protected override Block ReadBlock(int index, [NotNull] PipelineInfo pipelineInfo) { var uncompressedStream = MemoryStreamManager.GetStream("Uncompressed"); SourceStream.CopyBlockTo(uncompressedStream, pipelineInfo.BlockSize); uncompressedStream.Position = 0; return(new Block(index, uncompressedStream)); }
protected override Block ReadBlock(int index, PipelineInfo pipelineInfo) { var position = ReadInt32(); if (position < 0 || position >= pipelineInfo.BlockCount) { throw new PipelineException("Source file corrupted."); } var compressedLength = ReadInt32(); if (compressedLength <= 0) { throw new PipelineException("Source file corrupted."); } var compressedStream = MemoryStreamManager.GetStream("Compressed"); SourceStream.CopyBlockTo(compressedStream, compressedLength); compressedStream.Position = 0; return(new Block(position, compressedStream)); }
protected abstract void BeforeBlockWrite([NotNull] Block block, [NotNull] PipelineInfo pipelineInfo);
protected abstract void PrepareForWrite([NotNull] PipelineInfo pipelineInfo);
protected abstract Block ReadBlock(int index, [NotNull] PipelineInfo pipelineInfo);
protected override void BeforeBlockWrite(Block block, PipelineInfo pipelineInfo) { // Write block header Write(block.Position); Write((int)block.Data.Length); }
protected override void PrepareForWrite(PipelineInfo pipelineInfo) { // Write file header Write(pipelineInfo.UncompressedSize); Write(pipelineInfo.BlockSize); }
protected override void BeforeBlockWrite([NotNull] Block block, [NotNull] PipelineInfo pipelineInfo) { var offset = (long)block.Position * pipelineInfo.BlockSize; DestinationStream.Seek(offset, SeekOrigin.Begin); }
protected override void PrepareForWrite([NotNull] PipelineInfo pipelineInfo) { DestinationStream.SetLength(pipelineInfo.UncompressedSize); }