ArrayIndex在java byte []中超出范围

时间:2015-05-09 05:54:39

标签: java arrays bytearray indexoutofboundsexception arraycopy

任何机构都可以解决这个问题。

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);
   }
}

2 个答案:

答案 0 :(得分:2)

根据System.arraycopy上的javadoc: 如果满足以下任何条件,则抛出IndexOutOfBoundsException并且不修改目标:

  • srcPos参数为负数。
  • destPos参数为负数。
  • 长度参数为负数。
  • srcPos + length大于src.length,即源数组的长度。
  • destPos + length大于dest.length,即目标数组的长度。

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();)。