Dato un flusso di input, vorrei creare una sequenza lenta dei dati sotto forma di array di byte (blocchi). Ecco la mia prova:Clojure: creazione di una sequenza lazy di blocchi di byte da un flusso di input
(defn- read-or-nil [stream]
(let [buf (byte-array 2)]
(when-not (= -1 (.read stream buf))
buf)))
(defn byte-chunk-seq [stream]
(cons (read-or-nil stream) (lazy-seq (byte-chunk-seq stream))))
(with-open [rdr (java.io.FileInputStream. "/tmp/wut")]
(take 2 (byte-chunk-seq rdr)))
Nell'ultima dichiarazione, in cui sto testando il codice, ottengo un:
IOException flusso chiusa java.io.FileInputStream.readBytes (FileInputStream.java:-2).
Se cambio l'istruzione come take 1
, restituisce correttamente, ma ciò non mi aiuta molto. Qualcuno ha qualche idea del perché questo non avrebbe funzionato?