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.

È stato utile?

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.

byte-spec .

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/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top