gpt4 book ai didi

java - ServletOutputStream.write 有时会抛出索引越界

转载 作者:行者123 更新时间:2023-12-01 16:39:55 27 4
gpt4 key购买 nike

我遇到了一个无法一致重现的问题。我读取一个文件并将该文件的内容写入 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);

知道为什么即使使用相同的文件进行测试,问题也没有一致地报告吗?

最佳答案

inputStream.read(..) 可以返回 -1。我建议使用IOUtils来自 commons-io:IOUtils.copy(inputStream,outputStream)。特此声明,其实现如下:

byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}

关于java - ServletOutputStream.write 有时会抛出索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com