2个不稳定版本
0.2.0 | 2020年12月29日 |
---|---|
0.1.0 | 2015年11月23日 |
#1757 in 编码
58KB
1K SLoC
贵族
贵族是一个Rust库,用于编码和解码NBT,这是一种由Minecraft: Java Edition使用的格式。
特性
- 创建少量内存分配的解码器
- 使用构建器而不是堆分配对象进行编码的编码器
- 支持在Minecraft 1.12中添加的TAG_Long_Array(截至2020年的所有标签)。
- 可以正确编码和解码测试文件(例如bigtest.nbt)。
- 支持用于编码文本的Java变体的CESU-8。
- 不使用
unsafe
。
该库基于https://wiki.vg/NBT#Specification中的规范。
缺少的特性
- Serde支持。遇到了生命周期问题。
- CJSON支持。尚未实现。
- 基岩版支持。那里使用的格式不同。
- 往返编码/解码,因为编码器和解码器使用不同的类型。
解码
let mut file = File::open("hello_world.nbt")?;
let mut data = vec![];
file.read_to_end(&mut data)?;
let cursor = std::io::Cursor::new(data);
// Load the document. This step either copies the data (plaintext)
// or decompresses it (gzip).
let doc = Document::load(cursor)?;
// Parses the document. This returns the root tag's name, and the
// root tag (always a Compound tag). Both of these are borrowing the
// data inside the Document.
let (name, root) = doc.parse()?;
println!("name: {}", name.decode()?);
println!("{:#?}", root);
编码
let mut writer = NbtWriter::new();
let mut root = writer.root("hello world");
root.field("name").string("Bananrama");
// finish() call is required.
root.finish();
let result: Vec<u8> = writer.finish();
依赖项
~665KB
~11K SLoC