0
我有一个问题,我不能一致地重现。我读取一个文件并将该文件的内容写入ServletOutputStream。ServletOutputStream.write抛出索引超出范围有时
byte[] buff = new byte[65536];
int bytesRead = dataStream.read(buff);
response.getOutputStream().write(buff, 0, bytesRead);
我注意到一些文件(小于20KBs)抛出IndexOutOfBoundsException异常,有时写的OutputStream的时候,但在其他时间,一切工作只要找到。我的意思是,没有报告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()写(BUFF,0,bytesRead)。
即使使用相同文件进行测试,为什么问题没有被一致报告的任何想法?
感谢Bozho。我看到了你的观点,但在我的日志中,我打印了即将被读取和写入输出流的文件的大小。这意味着该文件是可访问的。你不觉得吗?我也会研究IOUtils.copy。再次感谢 – user305210 2011-02-08 16:54:36