Question

Quelle est la façon la plus propre pour analyser les données binaires dans Clojure? Je dois être capable de lire / écrire tout aussi propre à un fichier ou une prise.

quelque chose comme:

  (read-data source-of-data) 
  => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)}

et l'inverse pour mettre les données en arrière. Ce serait vraiment génial de définir en quelque sorte la structure une fois que la lecture et d'écriture fonctions utilisent la même définition.

Était-ce utile?

La solution

Gloss il est facile de définir des formats binaires au niveau de l'octet pour la lecture et écriture.

(defcodec example-codec
  [:id       :uint32
   :msg-type (enum :byte {:a \A, :b \B})
   :status   (string :ascii :length 11)])

(def buffer (byte-array 16))

(.read (input-stream "filename.bin") buffer)
(decode example-codec buffer)

(encode example-codec {:id 42, :msg-type :a, :status "A-OKAY"})

La fonction permet bit-map formats de niveau bits, mais le nombre de bits définis doit être divisible par 8 de sorte que les octets alignent toujours vers le haut.

Il y a aussi octet spec .

Autres conseils

Depuis Clojure peut utiliser les fonctions Java natives, pourquoi ne pas utiliser les? Une recherche sur Google rapide le long de ces lignes donne: http: / /gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top