간단한 문제를 해결하려고합니다. Bytes의 목록을 얻었고, 함수의 끝에서 그것을 바이트 배열로 변환하려고합니다.Java : 바이트 배열을 바이트 배열로 변환
final List<Byte> pdu = new ArrayList<Byte>();
....
return pdu.toArray(new byte[pdu.size()]);;
컴파일러에서 내 toArray
의 구문을 사용하지 않습니다. 이 문제를 해결하는 방법?
간단한 문제를 해결하려고합니다. Bytes의 목록을 얻었고, 함수의 끝에서 그것을 바이트 배열로 변환하려고합니다.Java : 바이트 배열을 바이트 배열로 변환
final List<Byte> pdu = new ArrayList<Byte>();
....
return pdu.toArray(new byte[pdu.size()]);;
컴파일러에서 내 toArray
의 구문을 사용하지 않습니다. 이 문제를 해결하는 방법?
byte[]
이 Byte[]
이 아니기 때문에 컴파일러가 마음에 들지 않습니다.
당신이 할 수있는 것은 사용입니다 commons-lang의 ArrayUtils.toPrimitive(wrapperCollection)
:
Byte[] bytes = pdu.toArray(new Byte[pdu.size()]);
return ArrayUtils.toPrimitive(bytes);
당신이 (평민 - 랭, 배열을 통해 단순히 루프를 사용하여 값 유형 byte[]
의 또 다른 배열을 채울 수없는 경우 그들은 것 자동으로 언 박싱 됨)
대신 Byte[]
으로 살 수있는 경우 그대로 두십시오.
주로, toArray(T[])
인 기본 유형을 사용할 수 없습니다.
참조 : How to convert List<Integer> to int[] in Java?. 이것은 정수에 적용되는 동일한 문제입니다.
Guava의 방법 Bytes.toArray(Collection<Byte> collection)을 사용하십시오.
List<Byte> list = ...
byte[] bytes = Bytes.toArray(list);
이렇게하면 Commons Lang에 상응하는 중간 배열 변환을 수행하지 않아도됩니다.
도 Dollar (check this revision) 시도 :
import static com.humaorie.dollar.Dollar.*
...
List<Byte> pdu = ...;
byte[] bytes = $(pdu).convert().toByteArray();
감사합니다 많이! :) ArrayUtils.toPrimitive를 전에 보지 못했습니다. 아주 유용합니다. –
그 커먼스 - 랭 물건에 대해 +1 –
나는 ArrayUtils의 해결책을 좋아하지 않는다. Java 8에는 박스 솔루션이 있어야합니다. – JohnMerlino