如何在Clojure中解析二进制文件

Art*_*ldt 9 binaryfiles clojure binary-data

在clojure中解析二进制数据的最简洁方法是什么?我需要能够同样干净地读/写文件或套接字.

就像是:

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

以及将数据放回的反向.以某种方式定义结构并使读写函数使用相同的定义真的很棒.

Jam*_*ble 13

Gloss可以轻松地在字节级别定义二进制格式以进行读取和写入.

(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"})
Run Code Online (Sandbox Code Playgroud)

bit-map函数允许位级格式,但定义的位数必须可被8整除,因此字节仍然排列.

还有字节规范.