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

dst_position 引数として選択temp.lengthした場合、arraycopy の 4 番目の引数を誤って使用しています。tempこれは、配列の終わりを過ぎて宛先を開始することを意味します。配列の最後を超えて最初に書き込もうとすると、ArrayIndexOutOfBoundsException見ているような結果になります。ドキュメントを確認してください:

public static void arraycopy(Object src,
                             int src_position,
                             オブジェクトdst、
                             int dst_position,
                             int 長さ)

指定されたソース配列の配列を、指定された位置からコピー先配列の指定された位置にコピーします。配列コンポーネントのサブシーケンスは、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 に答える