Clojureの中にバイナリファイルを解析する方法
-
09-09-2019 - |
質問
Clojureのバイナリデータを解析するためにクリーンな方法は何ですか? 私は、ファイルやソケットに均等にきれいに読み取り/書き込みできるようにする必要があります。
この 以下のような何かます:
(read-data source-of-data) => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)}
とバックデータを置くための逆。 何とかかつての構造を定義し、リードを持っていると機能は同じ定義を使用書くことは本当に素晴らしいことです。
解決
光沢には、両方の読み取りのためにバイトレベルでバイナリフォーマットを定義することが容易になりかつ書き込みます。
(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で割り切れなければならないので、バイトは依然として並ぶ。
バイトスペックのもあります。
他のヒント
Clojureのは、ネイティブのJava関数を使用することができますので、なぜそれらを使用していませんか?これらの線に沿って迅速グーグルができます:のhttp:/ /gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/する
所属していません StackOverflow