我在下面的代码中显示的行中得到了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());
}
有人能指出我错在哪里。感谢。
答案 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);