0

我在下面的代码中显示的行中得到了 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());
}

有人可以指出我错在哪里。谢谢。

4

1 回答 1

1

当您选择temp.length作为 dst_position 参数时,您错误地使用了 arraycopy 的第四个参数。这意味着您希望在temp数组末尾之后开始目的地。第一次尝试写入数组末尾会导致ArrayIndexOutOfBoundsException您看到的结果。检查文档

公共静态无效数组复制(对象源,
                             int src_position,
                             对象 dst,
                             int dst_position,
                             整数长度)

将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。数组组件的子序列从 src 引用的源数组复制到 dst 引用的目标数组。复制的组件数量等于长度参数。源数组中位置 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);
于 2013-01-22T08:10:46.447 回答