如何在Clojure中以最干净的方式解析二进制数据?我需要能够清晰地读/写文件或套接字。
类似于:
(read-data 数据源) => {:索引 42,:块大小 4,数据大小:31415,:数据 (1 2 3 4 ...)}
并且相反放置数据。真的很好,可以通过定义相同结构来同时使用读取和写入函数。
如何在Clojure中以最干净的方式解析二进制数据?我需要能够清晰地读/写文件或套接字。
类似于:
(read-data 数据源) => {:索引 42,:块大小 4,数据大小:31415,:数据 (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的工具。
既然Clojure可以使用本机Java函数,为什么不使用它们呢?快速搜索得到以下结果:http://gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/