Come analizzare i file binari in Clojure
-
09-09-2019 - |
Domanda
Qual è il modo più pulito per analizzare i dati binari in clojure? Ho bisogno di essere in grado di leggere / scrivere ugualmente in modo pulito in un file o una presa di corrente.
qualcosa di simile:
(read-data source-of-data) => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)}
e il contrario per mettere dati indietro. Sarebbe davvero grande per definire in qualche modo la struttura di una volta e hanno la lettura e scrittura funzioni utilizzano la stessa definizione.
Soluzione
Gloss rende facile definire formati binari a livello di byte per la lettura e scrittura.
(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 funzione bit-map
permette formati livello di bit, ma il numero di bit definiti deve essere divisibile per 8 così i byte ancora allineano.
Altri suggerimenti
Dal Clojure possibile utilizzare le funzioni Java native, perché non usare quelli? Un Googling rapido del genere dà: http: / /gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/