سؤال

ما هي أنظف طريقة لتحليل البيانات الثنائية في كلوي؟ أحتاج إلى أن أكون قادرا على القراءة / الكتابة بنفس القدر نظيفة إلى ملف أو مقبس.

شيء مثل:

 (قراءة البيانات للبيانات - البيانات) => {: INDEX 42،: Block-Size 4، حجم البيانات: 31415،: البيانات (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 الأصلية، فلماذا لا تستخدم تلك؟ googling سريعة على طول تلك الخطوط يعطي: http://gnuvince.wordpress.com/2009/01/29/Reading-binary-data-in-clojure/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top