我有一个大byte[]数组和很多小byte数组(大数组的长度是长数组的小数组).是否有一些快速方法可以将一个数组从开始位置复制到另一个数组,而不是手动为每个字节使用for循环?
jos*_*efx 60
你可以使用ByteBuffer.
ByteBuffer target = ByteBuffer.wrap(bigByteArray);
target.put(small1);
target.put(small2);
...;
Run Code Online (Sandbox Code Playgroud)
Ian*_*nes 13
或者您可以使用a ByteArrayOutputStream(虽然它会为您创建结果数组,而不是像您要求的那样复制到现有数组中).
public byte[] concatenateByteArrays(List<byte[]> blocks) {
ByteArrayOutputStream os = new ByteArrayOutputStream();
for (byte[] b : blocks) {
os.write(b, 0, b.length);
}
return os.toByteArray();
}
Run Code Online (Sandbox Code Playgroud)
public static void copySmallArraysToBigArray(final byte[][] smallArrays,
final byte[] bigArray){
int currentOffset = 0;
for(final byte[] currentArray : smallArrays){
System.arraycopy(
currentArray, 0,
bigArray, currentOffset,
currentArray.length
);
currentOffset += currentArray.length;
}
}
Run Code Online (Sandbox Code Playgroud)
public static void main(final String[] args){
final byte[][] smallArrays =
{
"The" .getBytes(),
" Quick" .getBytes(),
" Brown" .getBytes(),
" Fox" .getBytes()
};
final byte[] bigArray = "The Small Mauve Cat".getBytes();
copySmallArraysToBigArray(smallArrays, bigArray);
System.out.println(new String(bigArray));
}
Run Code Online (Sandbox Code Playgroud)
输出:
快速布朗福克斯
| 归档时间: |
|
| 查看次数: |
61776 次 |
| 最近记录: |