Frage

Was ist der sauberste Weg Binärdaten in clojure zu analysieren? Ich muss in der Lage sein, ebenso zu lesen / schreiben sauber in eine Datei oder eine Steckdose.

so etwas wie:

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

und umgekehrt zur Datensicherung setzen. Es wäre wirklich toll, irgendwie einmal die Struktur zu definieren und die Lese- und Schreibfunktionen die gleiche Definition verwenden.

War es hilfreich?

Lösung

Gloss macht es einfach zum Lesen Binärformaten auf Byte-Ebene zu definieren und Schreiben.

(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"})

Die bit-map Funktion erlaubt Formate Bitebene, aber die Anzahl von Bits definiert ist durch 8 teilbar sein, um noch das Bytes in einer Reihe aufstellen.

Es gibt auch Byte-spec .

Andere Tipps

Da Clojure native Java-Funktionen nutzen kann, warum nicht diejenigen benutzen? Eine schnelle googeln in diese Richtung gibt: http: / /gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top