tags:

views:

183

answers:

3

What is the most efficient way to do this?

+5  A: 

The toArray() method sounds like a good choice.

Update: Although, as folks have kindly pointed out, this works with "boxed" values. So a plain for-loop looks like a very good choice, too.

unwind
well its one way, but will produce a Byte[] which requires individual element unboxing.
mysomic
All byte values are stored as immutable object (see http://today.java.net/pub/a/today/2005/03/24/autoboxing.html). So the unboxing is (probably) negligible in terms of performance. It would be interesting to measure though. Well, not *interesting*.
Brian Agnew
and you'll need unboxing anyway if you want (primitive) bytes
Carlos Heuberger
@Brian: and you also need to consider the space overhead. A large Byte[] will occupy at least 4 times the space of a byte[] for the same information content. Maybe more, depending on how the original Byte values were created.
Stephen C
+7  A: 
byte[] byteArray = new byte[byteList.size()];
for (int index = 0; index < byteList.size(); index++) {
    byteArray[index] = byteList.get(index);
}

You may not like it but that’s about the only way to create a Genuine™ Array® of byte.

As pointed out in the comments, there are other ways. This one uses an iterator.

byte[] byteArray = new byte[byteList.size()];
int index = 0;
for (byte b : byteList) {
    byteArray[index++] = b;
}
Bombe
yes that's what I thought...You're right, I don't link it.
mysomic
there is not ONLY one way to program something! what about using an Iteraotr or an ListIterator?
Carlos Heuberger
You’re absolutely right. Added an `Iterator`-based example. :)
Bombe
splitting hairs :-)
mysomic
Yes, absolutely. ;)
Bombe
+1  A: 

Using Bytes.toArray(Collection<Byte>) (from Google's Guava library.)

Example:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.common.primitives.Bytes;

class Test {
    public static void main(String[] args) {
        List<Byte> byteList = new ArrayList<Byte>();
        byteList.add((byte) 1);
        byteList.add((byte) 2);
        byteList.add((byte) 3);
        byte[] byteArray = Bytes.toArray(byteList);
        System.out.println(Arrays.toString(byteArray));
    }
}

Or similarly, using PCJ:

import bak.pcj.Adapter;

// ...

byte[] byteArray = Adapter.asBytes(byteList).toArray();
finnw