comment analyser les fichiers binaires dans Clojure
-
09-09-2019 - |
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.
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/