异常:null类:类java.lang.ArrayIndexOutOfBoundsException

时间:2013-01-22 07:24:18

标签: arrays blackberry byte concatenation indexoutofboundsexception

我在下面的代码中显示的行中得到了ArrayIndexOutOfBoundsException:

String boundaryMessage = getBoundaryMessage(boundary, fileField, fileName, fileType);

String endBoundary = "\r\n--" + boundary + "--\r\n"; 
byte[] temp = new byte[boundaryMessage.getBytes().length+fileBytes.length+endBoundary.getBytes().length];       

temp = boundaryMessage.getBytes();
try {
    System.arraycopy(fileBytes, 0, temp, temp.length, fileBytes.length); //exception thrown here            
    System.arraycopy(endBoundary.getBytes(), 0, temp, temp.length, endBoundary.getBytes().length);
}
catch(Exception e){
    System.out.println("====Exception: "+e.getMessage()+" Class: "+e.getClass());
}

有人能指出我错在哪里。感谢。

1 个答案:

答案 0 :(得分:1)

当您选择temp.length作为dst_position参数时,您正在使用arraycopy的第四个参数。这意味着您希望在temp数组的末尾之后启动目标。写过数组末尾的第一次尝试会产生ArrayIndexOutOfBoundsException,就像你看到的一样。查看documentation

public static void arraycopy(Object src,
                             int src_position,
                             Object dst,
                             int dst_position,
                             int length)
  

将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。数组组件的子序列从src引用的源数组复制到dst引用的目标数组。复制的组件数等于length参数。源数组中位置srcOffset到srcOffset + length-1的组件分别被复制到目标数组的位置dstOffset到dstOffset + length-1。

编辑1月22日

你有问题的一行看起来像这样:

System.arraycopy(fileBytes, 0, temp, temp.length, fileBytes.length);

如果我理解你想要正确做什么,你应该能够通过将temp.length更改为0来修复它,这意味着你想将fileBytes复制到temp的开头:

System.arraycopy(fileBytes, 0, temp, 0, fileBytes.length);