Recently I created a wrapper to read and write data into a byte
array. To do it, I've been using an ArrayList<Byte>
, but I was wondering if this is the most efficent way to do it, because:
addAll()
doesn't work with byte
arrays (even using Arrays.asList()
, which returns me List<Byte[]>
). To fix it I'm just looping and adding a byte
at each loop, but I suppose this supposes a lot of function calls and so it has a performance cost.byte[]
from the ArrayList
. I can't cast from Byte[]
to byte[]
, so I have to use a loop for it.I know ByteArrayInputStream
and ByteArrayOutputStream
could be used for this, but it has some inconvenients:
readInt
, readLEInt
, readUInt
, etc), while those classes only can read / write a byte or a byte array. This isn't really a problem because I could fix that in the wrapper. But here comes the second problem.ByteArrayInputStream
and ByteArrayOutputStream
. I don't know if those could be syncronized in some way or I'd have to write the entire data of one to the other each time I wrote to the wrapper.And so, here comes my question: would using a ByteBuffer
be more efficient? I know you can take integers
, floats
, etc from it, even being able to change the byte order. What I was wondering is if there is a real performance change between using a ByteBuffer
and a ArrayList<Byte>
.
Definitely ByteBuffer or ByteArrayOutputStream. In your case ByteBuffer seems fine. Inspect the Javadoc, as it has nice methods, For putInt/getInt and such, you might want to set order (of those 4 bytes)
byteBuffer.order(ByteBuffer.LITTLE_ENDIAN);
With files you could use getChannel()
or variants and then use a MappedByteBuffer
.
A ByteBuffer may wrap a byte array, or allocate.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With