Add a fast serialization for Date objects

This commit is contained in:
James Reeves 2013-08-06 21:55:27 +01:00
parent e48ccb4c45
commit 8b13ff68b9

View file

@ -11,6 +11,7 @@
(:import [java.io DataInputStream DataOutputStream ByteArrayOutputStream (:import [java.io DataInputStream DataOutputStream ByteArrayOutputStream
ByteArrayInputStream] ByteArrayInputStream]
[java.lang.reflect Method] [java.lang.reflect Method]
[java.util Date]
[clojure.lang Keyword BigInt Ratio PersistentQueue PersistentTreeMap [clojure.lang Keyword BigInt Ratio PersistentQueue PersistentTreeMap
PersistentTreeSet IPersistentList IPersistentVector IPersistentMap PersistentTreeSet IPersistentList IPersistentVector IPersistentMap
IPersistentSet IPersistentCollection IRecord])) IPersistentSet IPersistentCollection IRecord]))
@ -66,6 +67,8 @@
(def ^:const id-record (int 80)) (def ^:const id-record (int 80))
(def ^:const id-date (int 90))
;;; DEPRECATED (old types will be supported only for thawing) ;;; DEPRECATED (old types will be supported only for thawing)
(def ^:const id-old-reader (int 1)) ; as of 0.9.2, for +64k support (def ^:const id-old-reader (int 1)) ; as of 0.9.2, for +64k support
(def ^:const id-old-string (int 11)) ; as of 0.9.2, for +64k support (def ^:const id-old-string (int 11)) ; as of 0.9.2, for +64k support
@ -173,6 +176,8 @@
(write-biginteger s (.numerator x)) (write-biginteger s (.numerator x))
(write-biginteger s (.denominator x))) (write-biginteger s (.denominator x)))
(freezer Date id-date (.writeLong s (.getTime x)))
(def ^:private head-meta-id (reduce-kv #(assoc %1 %3 %2) {} head-meta)) (def ^:private head-meta-id (reduce-kv #(assoc %1 %3 %2) {} head-meta))
(defn- wrap-header [data-ba metadata] (defn- wrap-header [data-ba metadata]
@ -276,6 +281,8 @@
method ^Method (.getMethod class "create" meth-sig)] method ^Method (.getMethod class "create" meth-sig)]
(.invoke method class (into-array Object [(thaw-from-stream s)]))) (.invoke method class (into-array Object [(thaw-from-stream s)])))
id-date (Date. (.readLong s))
;;; DEPRECATED ;;; DEPRECATED
id-old-reader (edn/read-string (.readUTF s)) id-old-reader (edn/read-string (.readUTF s))
id-old-string (.readUTF s) id-old-string (.readUTF s)