Эффективная бинарная сериализация для Clojure/Java

Я ищу способ эффективной сериализации объектов Clojure в двоичный формат - т.е. не просто классическую сериализацию текста для печати и чтения.

Т.е. я хочу сделать что-то вроде:

(def orig-data {:name "Data Object" 
                :data (get-big-java-array) 
                :other (get-clojure-data-stuff)})

(def binary (serialize orig-data))

;; here "binary" is a raw binary form, e.g. a Java byte array
;; so it can be persisted in key/value store or sent over network etc.

;; now check it works!

(def new-data (deserialize binary))

(= new-data orig-data)
=> true

Мотивация такова: у меня есть несколько больших структур данных, которые содержат значительное количество двоичных данных (в массивах Java), и я хочу избежать накладных расходов на преобразование их в текст и обратно. Кроме того, я пытаюсь сохранить компактный формат, чтобы минимизировать использование пропускной способности сети.

Конкретные особенности, которые я хотел бы иметь:

  • Легкая, чисто Java реализация
  • Поддержка всех стандартных структур данных Clojure, а также всех примитивов Java, массивов и т.д.
  • Отсутствие необходимости в дополнительных шагах сборки / конфигурационных файлах - я бы предпочел, чтобы это просто работало "из коробки"
  • Хорошая производительность в плане требуемого времени обработки
  • Компактность в плане двоичного кодированного представления

Какой лучший / стандартный подход к этому в Clojure?

5
задан mikera 9 October 2011 в 06:59
поделиться