在clojure中解析二进制数据的最干净方法是什么?
我需要能够同样清晰地读取/写入文件或套接字。
就像是:

(读取数据的数据源)
=> {:index 42,:block-size 4,data-size:31415,:data(1 2 3 4 ...)}


反之亦然。
一次以某种方式定义结构,并使读取和写入功能使用相同的定义,这真是太好了。

最佳答案

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"})
bit-map函数允许位级别格式,但是定义的位数必须被8整除,因此字节仍然对齐。

还有byte-spec

10-08 05:40