一般在网络、文件中,经常用到 byte[] 数组,但这次小编遇到一个互转的问题,发现原生 JDK 自带的方法贼麻烦,于是想到了 Guava 神器。
1、使用 for 循环
private byte[] listTobyte(List<Byte> list) {
if (list == null || list.size() < 0)
return null;
byte[] bytes = new byte[list.size()];
int i = 0;
Iterator<Byte> iterator = list.iterator();
while (iterator.hasNext()) {
bytes[i] = iterator.next();
i++;
}
return bytes;
}
Ps:这种方式很慢。
2、使用 Apache 官网提供的 JAR 里的方法
private byte[] listTobyte(List<Byte> list) {
byte[] bytes = ArrayUtils.toPrimitive(list);
return bytes;
}
JAR下载地址:http://commons.apache.org/proper/commons-lang/download_lang.cgi
说明:http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/ArrayUtils.html#toPrimitive%28java.lang.Integer%5b%5d%29
Ps:经测试,这种方法略快于第一种方法。
3、使用 Google 提供的 JAR 里的方法
private byte[] listTobyte(List<Byte> list) {
byte[] bytes=Bytes.toArray(list);
return bytes
}
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
Ps:经测试,这种方法明显快于第一第二种方法。
附
byte[] 数组转 List<Byte>
byte[] bytesArray = new byte[]{1,2,3,4,5};
List<Byte> byteList = new ArrayList<>();
byteList.addAll(Bytes.asList(bytesArray));