kdo*_*dog 4 serialization sbcl common-lisp
我有一个对象 o,它是 SBCL 中类 X 的一个实例。
我想要一个函数 write-X-object 以这样的方式将 o 序列化到一个文件中,当该文件用 load-X-object 读回时,生成的对象等效于 o。
;; writing the object
(write-X-object o "~/tmp/o.serialized")
;; reading the object, much later,
;; after sbcl has been exited and restarted
(setq v (read-X-object "~/tmp/o.serialized"))
Run Code Online (Sandbox Code Playgroud)
o 可能大约有 1 GB 的大小(或由数百万个较小对象组成的数组),具有复杂的结构,因此我们的想法是尽可能快地读取和写入。
有三种主要方法可以做到这一点
print-object为你的类定义一个方法来序列化它(也许你会让它依赖于一些特殊的变量,这样你就不会向 repl 打印千兆字节)。然后你可以定义一个阅读器宏(对应于你用来打印对象的任何语法)然后保存你会做的对象(with-open-file (x "/tmp/foo" :direction :output) (print my-object X))并把它取回你会做的(with-open-file (x "/tmp/foo") (read x)。优点是这很简单。缺点是这很慢并且不节省空间。| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |