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::borrow
ussr-nbt::borrow
simdnbt::owned
ussr-nbt::owned
shen-nbt5
azalea-nbt
graphite_binary
序列化
simdnbt::owned
azalea-nbt
ussr-nbt::borrow
ussr-nbt::owned
*simdnbt::borrow
*graphite_binary
shen-nbt5
*注意:数字 4 和 5 非常接近。
图表使用 criterion
生成。
Cargo 功能
为此库在批量交换字节序时使用 SIMD 指令。默认情况下,它将检测 CPU 功能并使用最快的可用指令集。但是,如果您禁用了 rt-cpu-feat
功能,它将始终使用后备实现,实际上如果使用 -C target-cpu=native
编译,这是一个性能最佳的实现。请注意,此标志将使得生成的二进制文件只能在编译它的 CPU 上运行。
依赖项
~1.1–1.7MB
~28K SLoC