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

用于提供nbt文件读写,解压与压缩功能 更多...

#include <NBT_IO.hpp>

class  DefaultInputStream
 默认输入流类,用于从标准库容器中读取数据 更多...
class  DefaultOutputStream
 默认输出流类,用于将数据写入到标准库容器中 更多...

静态 Public 成员函数

template<typename T = std::vector<uint8_t>>
requires (sizeof(typename T::value_type) == 1 && std::is_trivially_copyable_v<typename T::value_type>)
static bool WriteFile (const std::filesystem::path &pathFileName, const T &tData)
 从任意顺序容器写出字节流数据到指定文件名的文件中
template<typename T = std::vector<uint8_t>>
requires (sizeof(typename T::value_type) == 1 && std::is_trivially_copyable_v<typename T::value_type>)
static bool ReadFile (const std::filesystem::path &pathFileName, T &tData)
 从指定文件名的文件中读取字节流数据到任意顺序容器中
static bool IsFileExist (const std::filesystem::path &pathFileName)
 判断指定文件名的文件是否存在
static bool IsZlib (uint8_t u8DataFirst, uint8_t u8DataSecond)
 通过字节流开始的两个字节判断是否可能是Zlib压缩
static bool IsGzip (uint8_t u8DataFirst, uint8_t u8DataSecond)
 通过字节流开始的两个字节判断是否可能是Gzip压缩
template<typename T>
requires (sizeof(typename T::value_type) == 1 && std::is_trivially_copyable_v<typename T::value_type>)
static bool IsDataZipped (const T &tData)
 判断一个顺序容器存储的字节流是否可能存在压缩
template<typename I, typename O>
requires (sizeof(typename I::value_type) == 1 && std::is_trivially_copyable_v<typename I::value_type> && sizeof(typename O::value_type) == 1 && std::is_trivially_copyable_v<typename O::value_type>)
static void DecompressData (O &oData, const I &iData)
 解压数据,自动判断Zlib或Gzip并解压,如果失败则抛出异常
template<typename I, typename O>
requires (sizeof(typename I::value_type) == 1 && std::is_trivially_copyable_v<typename I::value_type> && sizeof(typename O::value_type) == 1 && std::is_trivially_copyable_v<typename O::value_type>)
static void CompressData (O &oData, const I &iData, int iLevel=Z_DEFAULT_COMPRESSION)
 压缩数据,默认压缩为Gzip,也就是NBT格式的标准压缩类型,如果失败则抛出异常
template<typename I, typename O, typename ErrInfoFunc = NBT_Print>
requires (sizeof(typename I::value_type) == 1 && std::is_trivially_copyable_v<typename I::value_type> && sizeof(typename O::value_type) == 1 && std::is_trivially_copyable_v<typename O::value_type>)
static bool DecompressDataNoThrow (O &oData, const I &iData, ErrInfoFunc funcErrInfo=NBT_Print{ stderr }) noexcept
 解压数据,但是不抛出异常,而是通过funcErrInfo打印异常信息并返回成功与否
template<typename I, typename O, typename ErrInfoFunc = NBT_Print>
requires (sizeof(typename I::value_type) == 1 && std::is_trivially_copyable_v<typename I::value_type> && sizeof(typename O::value_type) == 1 && std::is_trivially_copyable_v<typename O::value_type>)
static bool CompressDataNoThrow (O &oData, const I &iData, int iLevel=Z_DEFAULT_COMPRESSION, ErrInfoFunc funcErrInfo=NBT_Print{ stderr }) noexcept
 压缩数据,但是不抛出异常,而是通过funcErrInfo打印异常信息并返回成功与否

详细描述

用于提供nbt文件读写,解压与压缩功能

成员函数说明

◆ CompressData()

template<typename I, typename O>
requires (sizeof(typename I::value_type) == 1 && std::is_trivially_copyable_v<typename I::value_type> && sizeof(typename O::value_type) == 1 && std::is_trivially_copyable_v<typename O::value_type>)
void NBT_IO::CompressData ( O & oData,
const I & iData,
int iLevel = Z_DEFAULT_COMPRESSION )
inlinestatic

压缩数据,默认压缩为Gzip,也就是NBT格式的标准压缩类型,如果失败则抛出异常

模板参数
I输入的顺序容器类型
O输出的顺序容器类型
参数
[out]oData输入的顺序容器引用
iData输出的顺序容器引用
iLevel压缩等级
注解
oData和iData不能引用相同对象,否则错误。如果输入为空,则输出也为空。 顺序容器必须存储字节流,内部的值类型大小必须为1,且必须可平凡拷贝。

◆ CompressDataNoThrow()

template<typename I, typename O, typename ErrInfoFunc = NBT_Print>
requires (sizeof(typename I::value_type) == 1 && std::is_trivially_copyable_v<typename I::value_type> && sizeof(typename O::value_type) == 1 && std::is_trivially_copyable_v<typename O::value_type>)
bool NBT_IO::CompressDataNoThrow ( O & oData,
const I & iData,
int iLevel = Z_DEFAULT_COMPRESSION,
ErrInfoFunc funcErrInfo = NBT_Print{ stderr } )
inlinestaticnoexcept

压缩数据,但是不抛出异常,而是通过funcErrInfo打印异常信息并返回成功与否

模板参数
I输入的顺序容器类型
O输出的顺序容器类型
ErrInfoFunc打印异常信息的仿函数类型
参数
[out]oData输入的顺序容器引用
iData输出的顺序容器引用
iLevel压缩等级
funcErrInfo打印异常信息的仿函数
返回
操作是否成功
注解
funcErrInfo默认实现为NBT_Print并输出到标准异常stderr,用户可以自定义。 类似于NBT_Print的仿函数类型并替换输出例程,具体情况请参照NBT_Print类的说明。 顺序容器必须存储字节流,内部的值类型大小必须为1,且必须可平凡拷贝。

◆ DecompressData()

template<typename I, typename O>
requires (sizeof(typename I::value_type) == 1 && std::is_trivially_copyable_v<typename I::value_type> && sizeof(typename O::value_type) == 1 && std::is_trivially_copyable_v<typename O::value_type>)
void NBT_IO::DecompressData ( O & oData,
const I & iData )
inlinestatic

解压数据,自动判断Zlib或Gzip并解压,如果失败则抛出异常

模板参数
I输入的顺序容器类型
O输出的顺序容器类型
参数
[out]oData输入的顺序容器引用
iData输出的顺序容器引用
注解
oData和iData不能引用相同对象,否则错误。如果输入为空,则输出也为空。 顺序容器必须存储字节流,内部的值类型大小必须为1,且必须可平凡拷贝。

◆ DecompressDataNoThrow()

template<typename I, typename O, typename ErrInfoFunc = NBT_Print>
requires (sizeof(typename I::value_type) == 1 && std::is_trivially_copyable_v<typename I::value_type> && sizeof(typename O::value_type) == 1 && std::is_trivially_copyable_v<typename O::value_type>)
bool NBT_IO::DecompressDataNoThrow ( O & oData,
const I & iData,
ErrInfoFunc funcErrInfo = NBT_Print{ stderr } )
inlinestaticnoexcept

解压数据,但是不抛出异常,而是通过funcErrInfo打印异常信息并返回成功与否

模板参数
I输入的顺序容器类型
O输出的顺序容器类型
ErrInfoFunc打印异常信息的仿函数类型
参数
[out]oData输入的顺序容器引用
iData输出的顺序容器引用
funcErrInfo打印异常信息的仿函数
返回
操作是否成功
注解
funcErrInfo默认实现为NBT_Print并输出到标准异常stderr,用户可以自定义。 类似于NBT_Print的仿函数类型并替换输出例程,具体情况请参照NBT_Print类的说明。 顺序容器必须存储字节流,内部的值类型大小必须为1,且必须可平凡拷贝。

◆ IsDataZipped()

template<typename T>
requires (sizeof(typename T::value_type) == 1 && std::is_trivially_copyable_v<typename T::value_type>)
bool NBT_IO::IsDataZipped ( const T & tData)
inlinestatic

判断一个顺序容器存储的字节流是否可能存在压缩

模板参数
T任意顺序容器类型
参数
tData顺序容器类型的引用
返回
是否可能存在压缩
注解
仅用于可能性判断,具体是否压缩需要靠解压例程决定,仅作为快速判断的辅助函数。 顺序容器必须存储字节流,内部的值类型大小必须为1,且必须可平凡拷贝。

◆ IsFileExist()

bool NBT_IO::IsFileExist ( const std::filesystem::path & pathFileName)
inlinestatic

判断指定文件名的文件是否存在

参数
pathFileName目标文件名
返回
文件是否存在
注解
如果判断出现错误,也返回不存在。只有明确返回存在的文件存在, 否则文件可能不存在,也可能存在但是因为其它原因无法获取。

◆ IsGzip()

bool NBT_IO::IsGzip ( uint8_t u8DataFirst,
uint8_t u8DataSecond )
inlinestatic

通过字节流开始的两个字节判断是否可能是Gzip压缩

参数
u8DataFirst字节流的第一个字节
u8DataSecond字节流的第二个字节
返回
是否可能是Gzip压缩
注解
仅用于可能性判断,具体是否Gzip压缩需要靠解压例程决定,仅作为快速判断的辅助函数。

◆ IsZlib()

bool NBT_IO::IsZlib ( uint8_t u8DataFirst,
uint8_t u8DataSecond )
inlinestatic

通过字节流开始的两个字节判断是否可能是Zlib压缩

参数
u8DataFirst字节流的第一个字节
u8DataSecond字节流的第二个字节
返回
是否可能是Zlib压缩
注解
仅用于可能性判断,具体是否Zlib压缩需要靠解压例程决定,仅作为快速判断的辅助函数。

◆ ReadFile()

template<typename T = std::vector<uint8_t>>
requires (sizeof(typename T::value_type) == 1 && std::is_trivially_copyable_v<typename T::value_type>)
bool NBT_IO::ReadFile ( const std::filesystem::path & pathFileName,
T & tData )
inlinestatic

从指定文件名的文件中读取字节流数据到任意顺序容器中

模板参数
T任意顺序容器类型
参数
pathFileName目标文件名
[out]tData顺序容器的引用
返回
读取是否成功
注解
如果文件不存在,则失败。 顺序容器必须存储字节流,内部的值类型大小必须为1,且必须可平凡拷贝。

◆ WriteFile()

template<typename T = std::vector<uint8_t>>
requires (sizeof(typename T::value_type) == 1 && std::is_trivially_copyable_v<typename T::value_type>)
bool NBT_IO::WriteFile ( const std::filesystem::path & pathFileName,
const T & tData )
inlinestatic

从任意顺序容器写出字节流数据到指定文件名的文件中

模板参数
T任意顺序容器类型
参数
pathFileName目标文件名
tData顺序容器的引用
返回
写出是否成功
注解
如果文件已存在则直接清空并覆盖,未存在则创建文件。 顺序容器必须存储字节流,内部的值类型大小必须为1,且必须可平凡拷贝。

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