如何在 Clojure 中解析二进制文件
在 clojure 中解析二进制数据最简洁的方法是什么? 我需要能够同样干净地读/写文件或套接字。
类似于:
(read-data source-of-data) => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)}
以及相反的方式将数据放回。 如果能以某种方式定义一次结构并让读取和写入函数使用相同的定义,那就太好了。
What is the cleanest way to parse binary data in clojure?
I need to be able to read/write equally cleanly to a file or a socket.
something like:
(read-data source-of-data) => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)}
and the reverse for putting data back.
It would be really great to somehow define the structure once and have the read and write functions use the same definition.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Gloss 可以轻松地在字节级别定义二进制格式以进行读写。
位图函数允许位级格式,但定义的位数必须能被 8 整除,以便字节仍然对齐。
还有 byte-spec。
Gloss makes it easy to define binary formats at the byte level for both reading and writing.
The
bit-map
function allows bit level formats, but the number of bits defined must be divisible by 8 so the bytes still line up.There's also byte-spec.
既然 Clojure 可以使用原生 Java 函数,为什么不使用那些呢? 沿着这些路线快速谷歌搜索给出: http:// /gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/
Since Clojure can use native Java functions, why not use those? A quick Googling along those lines gives: http://gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/