大きなオブジェクトをファイルに書き出し&読み込む

今回扱ったのは、(prn obj) すると 7MB 以上になるオブジェクト
かなり簡単にできるので、アプリケーションのデータ保存に便利かも。

書き出し

db が大きな hash-map オブジェクト

(binding [*print-length* nil *print-level* nil]
    (with-out-writer "/foo/bar/filename"
                     (prn db)))

binding は、*print-length* などを設定していなければ必要ない。

読み込み

load-file も使えるが、大きなファイルだとエラーになってしまうので、以下のようにする

(def db
    (read (java.io.PushbackReader. (reader "/foo/bar/filename"))))

use

ともに use が必要

(use '[clojure.contrib.duck-streams :only (reader with-out-writer)])