我有一个复杂的Clojure数据结构需要序列化——基本上是我正在开发的在线游戏的整个当前游戏状态,以便我可以实现保存游戏文件。
我的要求如下:
- 某种人类可读的文本格式(我可能更喜欢s-expressions、JSON和XML,但也可以考虑其他格式)
- 支持所有通常的Clojure数据结构、关键字和基元
- 能够为自定义Java类、defrecords等提供自定义序列化/反序列化函数(这很重要,因为我需要在几种情况下执行类似于Java的readResolve操作)
- 优秀的性能是一个很不错的附加要求
有什么好的建议吗?
Serializable
可能是短期存储/传输数据结构的好方法。话虽如此,我想对于这种用例,需要更适合长期存储的格式,这可能由print-dup
提供。(如果实现核心 Clojure 数据结构的类的结构发生变化,Serializable
可能会遇到问题;而print-dup
不太可能。) - Michał Marczyk