3.3 KiB
title, category, mentions, tags
| title | category | mentions | tags | ||
|---|---|---|---|---|---|
| 读取NBT示例 | 基础 |
|
|
读取NBT示例
在进行本示例前,请先系统学习NBT的完整知识体系。参考*深入理解NBT*。 现在我们将分步骤演示如何读取NBT数据,示例数据的格式如下:
"":{
"myText":"我的NBT文本",
"my Int32 Number":456,
}
当我们不知道后续数据类型时,需要读取下一个字节。
我们读取到了数字10,表示即将读取复合标签。此时我们处于文件的根元素属性,需要读取根元素属性的名称。名称是字符串类型,因此首先需要读取字符串长度(以Int16形式存储)。
根元素属性名称的长度为0,因此无需继续读取字节。此时需要读取下一个字节来确定后续数据类型。
已知根复合标签中的下一个属性是字符串类型,但在读取属性值之前,需要先读取属性名称。因此需要再读取2个字节来获取属性名称的长度。
属性名称长度为6字节,继续读取接下来的6个字节。
通过UTF-8编码转换后,得到属性名称:myText。接下来重复字符串类型的读取流程,读取下一个Int16(2字节)来获取字符串值的长度。
字符串长度为0x0B(十进制11),继续读取11个字节。
经过UTF-8解码得到属性值:My NBT text。此时需要读取下一个字节来确定后续数据类型。
读取到类型3(Int32类型),需要先读取属性名称的长度。读取接下来的2个字节。
名称长度为0x0F(十进制15),继续读取15个字节并进行UTF-8解码。
得到属性名称:my Int32 Number。接下来读取Int32类型的4个字节。
读取到的Int32值为0x01c8(十进制456)。继续读取下一个字节确认后续数据类型。
读取到0x00空字节,表示根复合标签结束。由于这是根复合标签,此时完成整个NBT文件的读取。
NBT示例文件
本示例所使用的NBT文件:
<BButton link="/assets/nbt/nbt_example_file.nbt" download color=green
下载NBT文件
:::tip 重要注意事项 - 文件可能包含NBT基岩版文件头,需注意这种情况。参见深入理解NBT>NBT基岩版文件头 - 结束空字节并不直接终止NBT读取,仅标记当前复合标签的结束 - 所有数值均需按小端序读取,参见深入理解NBT>小端序 - NBT文件的首个根元素只能是复合标签或列表。根元素的名称虽然通常为空,但仍需读取并妥善处理 :::











