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
2009-10-14 10:34:02
well its one way, but will produce a Byte[] which requires individual element unboxing.
mysomic
2009-10-14 10:36:08
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
2009-10-14 10:39:28
and you'll need unboxing anyway if you want (primitive) bytes
Carlos Heuberger
2009-10-14 10:49:18
@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
2009-10-14 12:10:35
+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
2009-10-14 10:39:35
there is not ONLY one way to program something! what about using an Iteraotr or an ListIterator?
Carlos Heuberger
2009-10-14 10:52:51
+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
2009-10-14 12:54:57