Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 高效的序列化:spit、out str、pr_Clojure - Fatal编程技术网

Clojure 高效的序列化:spit、out str、pr

Clojure 高效的序列化:spit、out str、pr,clojure,Clojure,我有一段代码如下所示: (defn dump [path blob] (spit path (with-out-str (pr blob)))) 这是在转储GBs的数据。有没有更有效的方法?(不创建没有out str创建的中间字符串)内置序列化函数使用动态绑定变量*out*定义它们写入的位置: user> (def data [1 2 3 4 5]) #'user/data user> (with-open [output (clojure.java.io/write

我有一段代码如下所示:

(defn dump [path blob]
  (spit path
    (with-out-str (pr blob))))

这是在转储GBs的数据。有没有更有效的方法?(不创建没有out str创建的中间字符串)

内置序列化函数使用动态绑定变量
*out*
定义它们写入的位置:

user> (def data [1 2 3 4 5])
#'user/data

user> (with-open [output (clojure.java.io/writer "/tmp/data.edn")]
        (binding [*out* output]
          (prn data)))
nil
user> (slurp "/tmp/data.edn")
"[1 2 3 4 5]\n"

因此,如果您将其绑定到一个文件编写器(记住关闭它,并注意延迟计算和关闭文件描述符),那么所有输出都将转到该文件
pr
prn
将以确保可以读回的格式写入。其他打印功能将以一种对人类更容易的方式编写,而对计算机则不保证

什么是
blob
?通常我会使用
pr-str
,但这无助于提高速度,因为它在内部使用
而不使用str
。@Alan Thompson:“blob”是指我可以用pr写出并用clojure.edn/read-string读入的任何东西——我们不知道关于“blob”的任何其他信息