I am trying to read a TCP request via an instance of DataInputStream and am
running into this error with the following code:
(defn receive
[socket]
(with-open [reader (DataInputStream. (.getInputStream socket))]
(let [length (read-length reader)
bytes-in (byte-array length)
offset (atom 0)
index (atom 0)]
(while (not= -1 @offset)
(reset! offset (.read reader bytes-in offset (- length index)))
(reset! index (+ index offset))))))
For some reason, trying to update the value in offset appears to result in
this casting error. I tried testing a similar expression at the REPL, and
it works, e.g.
> (def blah (atom 0))
> (reset! blah 93) ; no error
It seems odd that Clojure would complain about this, since "93" is an
instance of java.lang.Long -- why would Clojure be so annoyingly
anal-retentive when setting the atom to a java.lang.Num? Also, if anyone
has any ideas on how to make achieve this without using atoms, and what the
best approach would be (a recursive solution using loop-recur, perhaps?)
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.