Skip to content

SOF3/nbtstreams

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nbtstreams

This library implements an NBT parser and an NBT exporter in a stream style.

Usage (this example uses special indentation for the sake of readability):

$nbtWriter = new NbtWriter("nbtFile.dat");
$nbtWriter
    ->name("Example")
    ->startCompound()
        ->name("aLong")->writeLong(1234)
        ->name("ReadableString")->writeString("I am readable")
        ->name("RawByteArray")->writeByteArray("\x00\xff\xff\x00\xfe\xfe\xfe\xfe\xfd\xfd\xfd\xfd\x12\x34\x56\x78")
        ->name("ByteArrayFromFile")->writeByteArrayFromFile("binary-file.dat")
        ->name("ByteArrayWithGenerator");
        $generator = $nbtWriter->startByteArrayWriterFromFile("binary-file-2.dat");
        do{
            $generator->send(2048); // copy 2048 bytes
            sleep(5);
        }while($generator->valid());
    $nbtWriter->endCompound()
->close();

$nbt = new NbtReader();
$name = $nbt->readName();
assert($name === "Example");
$nbt->startCompound();
$example = [];
while(($name = $nbt->readName($type)) !== null){
    switch($name){
        case "aLong":
            $example["aLong"] = $nbt->readLong();
            break;
        case "ReadableString":
            $example["string"] = $nbt->readString();
            break;
        case "RawByteArray":
            $example["rawByteArray"] = $nbt->readByteArray();
            break;
        case "ByteArrayFromFile":
            $fh = fopen("binary-file.copy.dat", "wb");
            foreach($nbt->generateByteArrayReader() as $buffer){
                fwrite($fh, $buffer);
            }
            fclose($fh);
            break;
    }
}
$nbt->endCompound();
$nbt->close();

Advantages of using nbtstreams over the traditional NBT class from PocketMine:

  • Improves performance because there is no need to read the whole file before executing parts of it; can spread the file reading into ticks
  • Prevents memory leak because there is no need to store the whole decompressed file in memory before using/saving it.

About

Stream-style NBT parser/exporter

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages