문제

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/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top