我遇到了一个我无法始终如一地重现的问题。我读取一个文件并将该文件的内容写入 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);
任何想法为什么即使使用相同的文件进行测试,也没有一致地报告问题?