Exemple #1
0
        private bool LoadBlock()
        {
            if (_blocks.Count == 0)
            {
                return(false);
            }
            if (_currentBlock != null && IsInBlock(_entryPosition, _currentBlock))
            {
                return(true);
            }
            CloseBlock();
            var index = FindBlock(_blocks, _entryPosition);

            if (index < 0)
            {
                return(false);
            }
            var block       = _blocks[index];
            var blockStream = new MemoryStream((int)block.UncompressedSize);

            _blockCompressor.ReadBlock(_entryOffset, block, blockStream);
            _currentBlock       = block;
            _currentBlockStream = blockStream;
            return(true);
        }
Exemple #2
0
 public void ReadBlock(long entryOffset, ModuleDataBlock block, Stream outStream)
 {
     _stream.Position = _dataAreaOffset + entryOffset + block.CompressedOffset;
     if (block.IsCompressed)
     {
         Inflate(_stream, block.CompressedSize, block.UncompressedSize, outStream);
     }
     else
     {
         StreamUtil.Copy(_stream, outStream, block.UncompressedSize);
     }
 }
Exemple #3
0
 private static bool IsInBlock(long position, ModuleDataBlock block)
 {
     return(position >= block.UncompressedOffset && position < block.UncompressedOffset + block.UncompressedSize);
 }
Exemple #4
0
 private void CloseBlock()
 {
     _currentBlockStream?.Dispose();
     _currentBlockStream = null;
     _currentBlock       = null;
 }