NBT读取示例
在开始本示例前,建议先系统学习NBT格式的完整知识体系。请参阅《NBT详解》。 现在我们将逐步演示如何读取NBT数据,待解析的数据格式如下:
"":{
"myText":"My NBT文本",
"my Int32 Number":456,
}当不确定后续数据类型时,我们读取下一个字节。

读取到什么?数字10表示接下来要读取的是复合类型(compound)。同时我们意识到当前处于文件的根元素属性位置,因此需要读取根元素属性名称。名称是字符串类型,所以首先要读取用Int16(短整型)表示的文本字节长度。

根元素属性名称长度为0,因此无需继续读取字节。此时无法确定后续内容,继续读取下一个字节。

现在可以确定根复合类型中的下一个属性是字符串类型。但在读取属性值之前,需要先读取其字符串形式的属性名。因此再读取2个字节来获取属性名的长度。

属性名长度为6字节,继续读取接下来的6个字节。

通过UTF-8编码转换后,我们得到属性名称:myText。记住该属性是字符串类型,我们重复相同流程:再次读取Int16(2字节)获取字符串值的长度。

字符串长度为0x0B(即11),继续读取11个字节。

经UTF-8编码转换后得到属性值:My NBT文本。 接下来?如果无法确定,就继续读取下一个字节来识别后续操作。

读取到类型3,表示Int32类型(占4字节)。但在读取数值前,仍需先获取该属性名称。因此先读取2个字节获取名称长度。

名称长度为0x0f(15),读取接下来的15个字节并通过UTF-8编码转换。

得到属性名称:my Int32 Number。接着读取Int32数值(4字节)。

读取到的Int32值为0x01c8(即456)。 再次不确定后续操作?只需读取下一个属性类型标识(1字节)。

读取到0x00(空字节),这标志着根复合类型的结束。由于这是**根**复合类型,至此我们已完成整个NBT文件的读取。
NBT示例文件
本示例使用的数据文件:
下载NBT文件