|byte-array woes||Karsten Schmidt||3/2/13 9:22 AM|
even though I've using byte arrays many times, I'm still massively
confused each time I use them...
For example, why does this fail?
(byte-array [1 2 3 4])
ClassCastException java.lang.Long cannot be cast to java.lang.Byte
I understand ints are longs by default, but all of the values are in
byte-range and should not cause a casting error. Also creating an
int-array with the same values works just fine (and casts values
(int-array [1 2 3 4])
Casting each value specifically to byte first works on the other hand:
(byte-array (map byte [1 2 3]))
Is that a bug or can someone please explain why bytes seem to require
special treatment in Clojure?
http://postspectacular.com | http://toxiclibs.org | http://toxi.co.uk
|Re: byte-array woes||Marko Topolnik||3/2/13 10:43 AM|
On Saturday, March 2, 2013 6:22:51 PM UTC+1, Karsten Schmidt wrote:
Calling it a bug wouldn't be entirely fair since it's a missing feature. I'd say this is filable as an enhancement request.
|Re: byte-array woes||Karsten Schmidt||3/2/13 2:49 PM|
Thanks, Marko! I'd count this as a sort of bug though... at least in
terms of consistency, since it breaks expected behaviour as
established by other common array c'tor functions:
(int-array [1 2 3]) => ok
(long-array [1 2 3]) => ok
(float-array [1 2 3]) => ok
(double-array [1 2 3]) => ok
(byte-array [1 2 3]) => fail
(short-array [1 2 3]) => fail
(char-array [1 2 3]) => fail, but bearable since you'd use shorts
anyway if you specify chars as numbers
I had a look at clojure.lang.Numbers.java and found a fix for both
bytes & shorts:
Whereas all the working array c'tors functions are using this pattern:
array[i] = ((Number)s.first()).intValue();
... the byte-array & short-array versions attempt to cast the sequence
items directly, i.e.
array[i] = (Byte)s.first();
Changing this to the first pattern (via Number) fixes the issue and
I'll submit a patch for this...
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clo...@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> For more options, visit this group at
> 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 clojure+u...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
|Re: byte-array woes||FrankS||3/2/13 4:01 PM|
I just ran into that issue while I was constructing byte-arrays for secure-hash test cases.
Ended-up using (byte-array (vector-of :byte 1 2 3 4)) to avoid writing the (byte-array [(byte 1)(byte 2)(byte 3)(byte 4)]).
Transparently adding valid byte-number values to a byte-array makes sense and would be helpful.
|Re: byte-array woes||Karsten Schmidt||3/4/13 6:30 AM|
Hi Frank, I've added a patch to CLJ-766 with a potential fix. Also,
Andy F. kindly pointed out that interested parties should vote on that
issue to help increase its visibility...
Add your 2 cents here (provided you've a CA):
|Re: byte-array woes||FrankS||3/4/13 11:02 AM|
I gave it my vote - thanks for trying to fix this issue - FrankS.
FrankS (from mobile)