chenjunfu2-nbt-cpp v2.1.3
一个基于CPP20的NBT(Named Binary Tag)库
载入中...
搜索中...
未找到
NBT_Scanner类 参考

NBT 数据流式扫描器,通过访问器回调处理 NBT 结构,不构建完整内存树 更多...

#include <NBT_Scanner.hpp>

静态 Public 成员函数

template<typename InputStream, typename Visitor>
static bool ScanNBT (InputStream &IptStream, Visitor &tVisitor, size_t szStackDepth=512) noexcept
 从输入流中扫描NBT数据,并通过访问器回调处理每个节点
template<typename DataType = std::vector<uint8_t>, typename Visitor>
static bool ScanNBT (const DataType &tDataInput, size_t szStartIdx, Visitor &tVisitor, size_t szStackDepth=512) noexcept
 从数据容器中扫描NBT数据,并通过访问器回调处理每个节点
template<typename Visitor, typename InfoFunc = NBT_Print>
static bool SimpleScanNbtFile (const std::filesystem::path &pathFileName, Visitor &tVisitor, InfoFunc funcInfo=InfoFunc{}) noexcept
 从可能被压缩的文件中扫描 NBT 数据,并通过访问器回调处理每个节点

详细描述

NBT 数据流式扫描器,通过访问器回调处理 NBT 结构,不构建完整内存树

注解
该类提供静态方法 ScanNBT,以流式方式解析 NBT 数据。解析过程中通过访问器(Visitor) 回调通知各个节点(数值、数组、字符串、列表、复合标签等),用户可通过自定义访 问器控制解析流程(进入、跳过、停止)。处理NBT时无需一次性加载整个数据树到内存。

成员函数说明

◆ ScanNBT() [1/2]

template<typename DataType = std::vector<uint8_t>, typename Visitor>
bool NBT_Scanner::ScanNBT ( const DataType & tDataInput,
size_t szStartIdx,
Visitor & tVisitor,
size_t szStackDepth = 512 )
inlinestaticnoexcept

从数据容器中扫描NBT数据,并通过访问器回调处理每个节点

模板参数
DataType数据容器类型,默认为std::vector<uint8_t>
Visitor访问器类型,必须符合IsLookLike_NBT_Visitor概念
参数
tDataInput输入数据容器
szStartIdx数据起始索引,会忽略容器中前szStartIdx字节的数据
tVisitor访问器对象,用于处理扫描过程中遇到的NBT数据节点
szStackDepth递归最大深度,防止栈溢出
返回
扫描成功返回true,失败返回false
注解
此函数是ScanNBT(InputStream)版本的数据容器适配版本,其它行为请参考ScanNBT(InputStream)版本的说明。

◆ ScanNBT() [2/2]

template<typename InputStream, typename Visitor>
bool NBT_Scanner::ScanNBT ( InputStream & IptStream,
Visitor & tVisitor,
size_t szStackDepth = 512 )
inlinestaticnoexcept

从输入流中扫描NBT数据,并通过访问器回调处理每个节点

模板参数
InputStream输入流类型,必须符合DefaultInputStream类型的接口
Visitor访问器类型,必须符合IsLookLike_NBT_Visitor概念
参数
IptStream输入流对象
tVisitor访问器对象,用于处理扫描过程中遇到的NBT数据节点
szStackDepth递归最大深度,防止栈溢出
返回
扫描成功返回true,失败返回false
注解
函数通过访问器回调的方式遍历整个NBT结构,不会构建完整的内存树,适合处理大型NBT数据。 若遇到格式错误或超过深度限制,函数将返回false并停止扫描。

◆ SimpleScanNbtFile()

template<typename Visitor, typename InfoFunc = NBT_Print>
bool NBT_Scanner::SimpleScanNbtFile ( const std::filesystem::path & pathFileName,
Visitor & tVisitor,
InfoFunc funcInfo = InfoFunc{} )
inlinestaticnoexcept

从可能被压缩的文件中扫描 NBT 数据,并通过访问器回调处理每个节点

模板参数
Visitor访问器类型,必须符合 IsLookLike_NBT_Visitor 概念
InfoFunc错误信息输出仿函数类型
参数
pathFileName源文件路径
tVisitor访问器对象,用于处理扫描过程中遇到的 NBT 数据节点
funcInfo错误信息处理仿函数
返回
扫描成功返回 true,失败返回 false
注解
本函数会读取整个文件内容,先尝试使用 Zlib 解压。若解压失败,则假定文件未压缩,直接使用原始数据。 然后调用 ScanNBT 扫描数据。如果文件不存在,则会失败。

该类的文档由以下文件生成: