Title

Monday, 19 January 2015

How to read a whole binary file (Nippy) into byte array in Clojure?


I need to convert Nippy data structures stored on disk into something that can be read by Nippy? Nippy uses byte arrays, so I need some way to convert the file into a byte array. I have tried

(clojure.java.io/to-byte-array (clojure.java.io/file folder-path file-path))

but this gives

java.lang.IllegalArgumentException: Value out of range for byte: ? 

Then I try:

(into-array Byte/TYPE (map byte (slurp (clojure.java.io/file folder-path file-path)))) 

but somehow the namespace is wrong, and I can't find the right one.

To write the Nippy structures in the first place, I am using:

(with-open [w (clojure.java.io/output-stream file-path)]   (.write w (nippy/freeze data)))))
Answer

You can give a try to ClojureWerk's Buffy : https://github.com/clojurewerkz/buffy.

Buffy is a Clojure library for working with binary data, writing complete binary protocol implementations in Clojure, storing complex data structures in an off-heap cache, reading binary files and doing everything you would usually do with ByteBuffer.

No comments:

Post a Comment