5 个版本
| 0.2.1 | 2024 年 8 月 12 日 |
|---|---|
| 0.2.0 | 2024 年 8 月 11 日 |
| 0.1.2 | 2024 年 8 月 10 日 |
| 0.1.1 | 2024 年 8 月 10 日 |
| 0.1.0 | 2024 年 8 月 10 日 |
#74 在 游戏 中
每月 281 次下载
180KB
2K SLoC
ussr-nbt
为 Minecraft: Java Edition 提供一个非常快速和通用的 NBT 库。
此库的一些特性
- 一个用于避免大多数分配和所有复制的
borrow模块。 - 一个区分完整 (
Nbt) 和部分 (Compound、Tag、List) NBT 值的 API。 - 支持 Minecraft 1.12 中引入的
TAG_Long_Array。 - 支持 Java 使用的修改后的 UTF-8 编码字符串。
使用
use std::net::TcpStream;
use ussr_nbt::owned::*;
fn main() {
let mut conn: TcpStream = TcpStream::connect("127.0.0.1:25565").unwrap();
let nbt: Nbt = Nbt::read(&mut conn).unwrap();
println!("{nbt:#?}");
}
有关更多示例,请参阅 examples 目录。
说明
- 在解析过程中不执行修改后的 UTF-8 验证和转换。
- 在解析过程中不交换字节序。
- 字节是无符号的。
- 在序列化时,此库将只为列表/数组写入最多
i32::MAX个元素,并为字符串写入最多u16::MAX个字节。这是由于 NBT 规范使用 [i32] 作为列表/数组的长度,使用 [u16] 作为字符串的长度。
路线图
nbt!宏用于构建 NBT 值。serde支持。- 一些用于检查(和绑定)NBT 模式的宏。
Debug>/Display中的 SNBT 格式化。- 也许为
RawVec和RawSlice提供迭代器,尽管批量转换更有效。
性能比较
反序列化
simdnbt::borrowussr-nbt::borrowsimdnbt::ownedussr-nbt::ownedshen-nbt5azalea-nbtgraphite_binary

序列化
simdnbt::ownedazalea-nbtussr-nbt::borrowussr-nbt::owned*simdnbt::borrow*graphite_binaryshen-nbt5
*注意:数字 4 和 5 非常接近。

图表使用 criterion 生成。
Cargo 功能
为此库在批量交换字节序时使用 SIMD 指令。默认情况下,它将检测 CPU 功能并使用最快的可用指令集。但是,如果您禁用了 rt-cpu-feat 功能,它将始终使用后备实现,实际上如果使用 -C target-cpu=native 编译,这是一个性能最佳的实现。请注意,此标志将使得生成的二进制文件只能在编译它的 CPU 上运行。
依赖项
~1.1–1.7MB
~28K SLoC