0

一貫して再現できない問題が発生しています。ファイルを読み取り、そのファイルの内容を ServletOutputStream に書き込みます。

                        byte[] buff = new byte[65536];

                        int bytesRead = dataStream.read(buff);
                        response.getOutputStream().write(buff, 0, bytesRead);

一部のファイル (20KB 未満) が、出力ストリームへの書き込み時に IndexOutofBoundsException をスローすることがあることに気付きましたが、それ以外の場合は、すべてがうまく機能します。つまり、IndexOutOfBoundsException は報告されません。

これが私が得るスタックトレースです:

java.lang.ArrayIndexOutOfBoundsException
        at java.lang.System.arraycopy(Native Method)
        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:331)
        at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
        at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
        at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:88)
        at com.abc.web.DeliverData.serviceRequest(DeliverData.java:101)

私のコードの 101 行目は次のとおりです。 response.getOutputStream().write(buff, 0, bytesRead);

同じファイルでテストしても一貫して問題が報告されない理由はありますか?

4

1 に答える 1

6

inputStream.read(..)戻ることができ-1ます。IOUtilscommons-io: から使用することをお勧めしますIOUtils.copy(inputStream, outputStream)。記録のために、次のように実装されています。

byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = input.read(buffer))) {
   output.write(buffer, 0, n);
}
于 2011-02-08T16:46:29.840 に答える