Guest User

Untitled

a guest
Jun 15th, 2015
354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. (ns freeze.core)
  2.  
  3. (def b64e (java.util.Base64/getEncoder))
  4. (def b64d (java.util.Base64/getDecoder))
  5.  
  6. (defn deserialize [s]
  7. "Deserialize string into its Java object."
  8. (with-open [bstream (java.io.ByteArrayInputStream. (.decode b64d s))
  9. objstream (java.io.ObjectInputStream. bstream)]
  10. (.readObject objstream)))
  11.  
  12.  
  13. (defmethod clojure.core/print-dup java.io.Serializable [o w]
  14. (let [ba (with-open [bytestream (java.io.ByteArrayOutputStream.)
  15. objstream (java.io.ObjectOutputStream. bytestream)]
  16. (.writeObject objstream o)
  17. (.toByteArray bytestream))
  18. string (.encodeToString b64e ba)]
  19. (.write w (str "=(freeze.core/deserialize \"" string "\")"))))
  20.  
  21. ;; Now for the test that fails.
  22. (def t (java.time.LocalDateTime/now)) ;; => _
  23. (def s (binding [*print-dup* true] (pr-str x)))
  24.  
  25. (read-string "#=(+ 1 2)") ;; => 3
  26. (read-string s) ;; => =
  27. (freeze.core/deserialize "rO0ABXNyAA1qYXZhLnRpbWUuU2VylV2EuhsiSLIMAAB4cHcOBQAAB98GDxAGEA1Z+AB4") ;; => #<LocalDateTime blah>
Advertisement
Add Comment
Please, Sign In to add comment