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