Pregunta

¿Cuál es la manera más limpia para analizar los datos binarios en clojure? Tengo que ser capaz de leer / escribir igualmente limpiamente a un archivo o un socket.

algo como:

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

y lo contrario para poner datos de nuevo. Sería realmente grande para definir de alguna manera la estructura de una vez y tener la lectura y escritura funciones utilizan la misma definición.

¿Fue útil?

Solución

Gloss hace que sea fácil de definir formatos binarios a nivel de byte para la lectura y la por escrito.

(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 función bit-map permite formatos de nivel de bits, pero el número de bits definidos debe ser divisible por 8 por lo que los bytes todavía alineación.

También ha .

Otros consejos

Desde Clojure puede utilizar las funciones nativas de Java, por qué no utilizar esos? A Googling rápida a lo largo de esas líneas da: http: / /gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top