#nbt #minecraft #serde #serializer-deserializer

fastnbt

Serde 解析器和序列化器用于 Minecraft 的 NBT 格式

40 个版本 (20 个稳定版)

2.5.0 2024 年 3 月 2 日
2.4.4 2023 年 4 月 29 日
2.4.3 2023 年 3 月 4 日
2.3.2 2022 年 8 月 17 日
0.6.0 2020 年 7 月 15 日

#1 in #nbt

Download history 182/week @ 2024-04-20 175/week @ 2024-04-27 226/week @ 2024-05-04 273/week @ 2024-05-11 203/week @ 2024-05-18 178/week @ 2024-05-25 196/week @ 2024-06-01 153/week @ 2024-06-08 159/week @ 2024-06-15 174/week @ 2024-06-22 106/week @ 2024-06-29 74/week @ 2024-07-06 174/week @ 2024-07-13 145/week @ 2024-07-20 345/week @ 2024-07-27 234/week @ 2024-08-03

每月下载量 906
用于 23 个 crate (20 个直接使用)

MIT/Apache

300KB
8K SLoC

fastnbt 库

文档: docs.rs

Minecraft: Java Edition 的 NBT 格式提供快速 serde 解析器和序列化器。

尽可能支持通过 from_bytes 实现“零拷贝”。borrow 模块包含更多类型以避免分配。

包括一个用于序列化和反序列化任何 NBT 的 Value 类型。 Value 正确地保留了确切的 NBT 结构。 nbt! 宏允许轻松创建这些值。

为了支持 NBT 的数组,存在专门的 ByteArrayIntArrayLongArray 类型。

查看文档 获取更多信息。

[dependencies]
fastnbt = "2"

fastnbt 遵循 Semver,这个项目所做的一些事情 不算 是破坏性变更包括

  • Rust 版本的最小变更。在企业环境之外,这应该不会太难,而且我认为在这些环境中不需要 NBT。
  • 改进(反)序列化器,使得原本无法(反)序列化的有效 NBT 现在可以(反)序列化。我将任何这些情况都视为一个错误。
  • 序列化 fastnbt/fastanvil 类型到其他格式时的数据格式。fastnbt 中的类型实现 serde::Serialize 以允许输出到其他数据格式,但可能在将来改变结构。

使 fastnbt 与 WebAssembly 不兼容的变更 被视为 破坏性变更。

其他 NBT 库

似乎有几个库支持 serde(反)序列化,我找到的主要有

可能还有其他!肯定还有更多不支持 serde 的。

  • 所有这些库都支持使用 serde 进行序列化和反序列化。

  • 由于需要自定义处理 NBT 数组类型,它们彼此之间不兼容。

  • 它们都处理Minecraft的(实际上是Java的)特殊Unicode。

  • quartz和fastnbt支持从底层字节中借取反序列化。

  • fastnbt的Value类型可以双向反序列化和序列化NBT数组。其他crate也有值类型,它们也可能正确地双向操作。

    说实话,它们都是不错的选择!

依赖项

~0.5–1.2MB
~26K SLoC