在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。