任何机构都可以解决这个问题。
public class Main {
public static void main(String[] args) {
byte[] temp = "smile".getBytes();
byte[] hash = new byte[32];
System.arraycopy(temp, 0, hash, 0, 16);
System.arraycopy(temp, 0, hash, 15, 16);
}
}
答案 0 :(得分:2)
根据System.arraycopy上的javadoc: 如果满足以下任何条件,则抛出IndexOutOfBoundsException并且不修改目标:
PFB代码段:
byte[] temp = "smile".getBytes();
byte[] hash = new byte[32];
System.arraycopy(temp, 0, hash, 0, temp.length);
// System.arraycopy(temp, 0, hash, 15, 16); // should be used carefully
答案 1 :(得分:1)
temp的长度为5
,您尝试复制到length
16
的哈希值,这会导致异常。
System.arraycopy(source, sourcePosition, destination, destinationPosition, length);
复制指定源数组中的数组 开始 指定位置, 到目的地 指定位置 阵列。从源复制数组组件的子序列 src引用的数组到dest引用的目标数组。 复制的 组件数等于长度参数 。
您的源数组必须有16个要复制的组件,但此处长度为5,并且您尝试从temp
复制16个组件。
您可以增加temp
数组(即byte[] temp = "smile is the most important thing.".getBytes();
)。