两代 Rion
GitHub 上有过两个 Rion 仓库:
| Rion(旧) | Rion(新) | |
|---|---|---|
| 账号 | Wenveo | Roshaless |
| 状态 | WIP 存档 | 活跃开发 |
| 定位 | RST ↔ JSON 简单转换 | 高性能库 + CLI + GUI |
| 运行时 | 早期 .NET | .NET 9.0 |
| AOT | ❌ | ✅ Native AOT |
| ⭐ | 3 | 3 |
GitHub: Roshaless/Rion | MIT 协议
架构设计
新版 Rion 采用清晰的三层架构:
Rion/
├── src/
│ ├── Rion.Core/ # 核心库 — 读写/转换 .stringtable
│ │ ├── Buffers/ # 内存缓冲区、文件 IO 抽象
│ │ ├── Hashing/ # RST 哈希算法(XxHash3、XxHash64)
│ │ ├── Metadata/ # 字符串表元数据与版本兼容
│ │ └── Serialization/ # JSON ↔ 二进制序列化
│ ├── Rion.Cli/ # CLI 工具
│ │ └── Commands/ # 子命令实现
│ └── Rion.App/ # 桌面 GUI(Avalonia)— 开发中核心特性
极致性能
| 操作 | 吞吐量 |
|---|---|
| 读取 .stringtable(100K 条目) | ~22 ms |
| 写入 .stringtable(100K 条目) | ~27 ms |
关键优化:
- 零拷贝 — 全链路
Span<byte>/ReadOnlySpan<byte> - unsafe 指针算术 — 哈希表遍历
- NativeMemory.Alloc — 直接内存管理
- StringRefManager — 弱引用字符串驻留
- AOT 兼容 — 无反射代码路径
多种哈希算法
支持 XxHash3 和 XxHash64,兼容所有已知 RST 版本(v2–v5):
| 版本标识 | 算法 | Bit Mask |
|---|---|---|
v2 |
XxHash64 | legacy |
v3 |
XxHash64 | legacy |
v4 |
XxHash64 | legacy |
v5 / v5-legacy |
XxHash3 | 38-bit |
v5-1415 |
XxHash3 | 38-bit |
v5-1502 / latest |
XxHash3 | 38-bit |
双向转换
# 自动检测格式并转换
rion data.stringtable # → data.json
rion data.json # → data.stringtable
# 批量转换
rion *.stringtable -d ./output
# 显式指定目标格式
rion data.bin -t json
rion data.json -t rst逆哈希查找
# 预加载已知字符串→哈希映射
rion data.stringtable --hashes-dir ./hashes
# 按哈希值搜索
rion lookup data.stringtable --hash 0x155C62DCFD
# 按字符串值搜索
rion lookup data.stringtable --value "champion" -n 20哈希计算
# 默认最新算法
rion hash "hello"
# 指定游戏版本
rion hash "hello" -v v5-1502
# 基准测试
rion hash "test" -v latest -n 1000000
# 列出所有支持的版本标识
rion hash --list-versionsAPI 速览
using Rion.Core;
using Rion.Core.Metadata;
// 读取
var table = StringTable.Read("data.stringtable");
// 创建并写入
var newTable = StringTable.Create(StringTableMetadata.Latest);
newTable["champion_name"] = "Ashe";
StringTable.Write("output.stringtable", newTable);
// JSON 互转
var record = StringTable.ReadAsRecord("data.stringtable");
StringTableSerializer.SerializeToJsonFile("data.json", record);从依赖到独立
回顾整个技术线:
GZSkinsX(WinUI 3 模组工具)
↓ 依赖
Noisrev.League.IO.RST(.NET Standard 2.0 NuGet 库)
↓ 演进
Rion — Wenveo(WIP 简单转换工具)
↓ 重写
Rion — Roshaless(.NET 9.0 高性能库 + CLI + Avalonia GUI)每一步都建立在对 RST 格式理解的深入之上。
Rion 需要 .NET 9.0 SDK,支持 Windows、Linux 和 macOS。