private function createCompressedStream(Sector $sector) { $stream = $this->stream; if ($this->block->isCompressed() && $this->block->getSize() > $this->block->getCompressedSize()) { $parser = new BinaryStreamParser($this->stream); $compressionType = $parser->readByte(); switch ($compressionType) { case 0x0: return $stream; case 0x2: $len = $parser->readUInt16(); $blockData = $stream->readBytes($len); return new MemoryStream(gzinflate($blockData)); // case 0x02: return new CompressedStream($stream, new DeflateCompression()); // case 0x02: return new CompressedStream($stream, new DeflateCompression()); case 0x10: return new CompressedStream($stream, new BZIPCompression()); default: throw new CompressionException(sprintf('Invalid compression format: %s', $compressionType)); } } return $stream; }
private function parseBlockTable() { $hashing = new FileKeyHashing(); $encryptedStream = new EncryptedStream($this->stream, new DefaultEncryption($hashing->hash('(block table)'))); $parser = new BinaryStreamParser($encryptedStream); $parser->seek($this->getUserDataOffset() + $this->getHeader()->getBlockTablePos()); $blocks = array(); // $offsetFix = 0; for ($i = 0; $i < $this->getHeader()->getBlockTableSize(); $i++) { $block = $blocks[$i] = Block::parse($parser); // if($block->getSize() == 0) { // $offsetFix++; // } } return new BlockTable($blocks); }
public function testExistsFlag() { $parser = $this->createMemoryParser(hex2bin(self::TEST_EXISTS_BLOCK_DATA)); $block = Block::parse($parser); $this->assertEquals(true, $block->isExisting()); }