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

如何在Clojure中解析二进制文件,clojure,binaryfiles,binary-data,Clojure,Binaryfiles,Binary Data,在clojure中解析二进制数据最干净的方法是什么? 我需要能够同样干净地读/写文件或套接字 比如: (read-data source-of-data) => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)} (读取数据的数据源) =>{:索引42,:块大小4,数据大小:31415,:数据(1234…) 相反,用于将数据放回。 以某种方式定义一次结构,让读写函数使用相同的定义,这将是非常棒的 既然Cl

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

(read-data source-of-data) => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)} (读取数据的数据源) =>{:索引42,:块大小4,数据大小:31415,:数据(1234…) 相反,用于将数据放回。
以某种方式定义一次结构,让读写函数使用相同的定义,这将是非常棒的

既然Clojure可以使用本机Java函数,为什么不使用它们呢?沿着这些行快速搜索会得到:

可以很容易地在字节级别定义二进制格式,用于读取和写入

(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"})
位图
函数允许位级格式,但定义的位数必须能被8整除,以便字节仍然对齐


还有。

虽然这是一个好的开始,但我需要读和写这些fomats。我还需要位级精度。