在Android上序列化任意对象

时间:2013-12-12 08:30:09

标签: java android serialization clojure clone

我想自动转储由Clojure初始化产生的Var对象 - 即一个不实现Serializable的复杂对象,并嵌套其他几个对象。

我尝试了一些框架,但它们不起作用(XStream生成带有一些空值的XML),Android不支持(Kryo需要java.misc.Unsafe,它在Android上的实现有限; JBoss Serialization也需要Android上没有的东西...),或者不是自动的(GSon需要为泛型定义类型标记......)。

效率并不重要(它只是一个实验/调试)。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用pr-str转换为字符串:

user=> (pr-str [:map {:a [1 2 3]} "string"])
"[:map {:a [1 2 3]} \"string\"]"

并使用edn回读:

user=> (require '[clojure.edn :as edn])
user=> (edn/read-string "[:map {:a [1 2 3]} \"string\"]")
[:map {:a [1 2 3]} "string"]

或只是read-string

user=> (read-string "[:map {:a [1 2 3]} \"string\"]")
[:map {:a [1 2 3]} "string"]

注意 read-string从“不受信任的来源”阅读不安全 - http://clojuredocs.org/clojure_core/1.3.0/clojure.core/read