NBT 数据流式扫描器,通过访问器回调处理 NBT 结构,不构建完整内存树
更多...
#include <NBT_Scanner.hpp>
|
| 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 数据,并通过访问器回调处理每个节点
- 模板参数
-
- 参数
-
| pathFileName | 源文件路径 |
| tVisitor | 访问器对象,用于处理扫描过程中遇到的 NBT 数据节点 |
| funcInfo | 错误信息处理仿函数 |
- 返回
- 扫描成功返回 true,失败返回 false
- 注解
- 本函数会读取整个文件内容,先尝试使用 Zlib 解压。若解压失败,则假定文件未压缩,直接使用原始数据。 然后调用 ScanNBT 扫描数据。如果文件不存在,则会失败。
该类的文档由以下文件生成: