紧急求助!!文件下载时中途停止下载,后台报java.lang.ArrayIndexOutOfBoundsException

simplexc 2012-10-30 06:34:26
如题,我在文件下载时按下F5 刷新,后台报错java.lang.ArrayIndexOutOfBoundsException
显示是write(i)这一行。。请各位大侠帮帮忙,怎样解决。。。
本人菜鸟……
...全文
455 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2012-10-31
  • 打赏
  • 举报
回复
你这种情况应该是下载代码所属的类是单例的,出现了多线程问题。
就是让你的下载代码在同一个session中串行化,也就是在同一个session中下载代码不能并行执行。
在下载代码中:
获取session,对session加锁。
synchronized (session) {
//下载代码放在这里
}
simplexc 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
根据楼主的描述,你是在下载中刷新才会有异常,如果不刷新就没有异常了,对吧?
不知道你的下载代码有没有做session同步?没有的话就同步吧
[/Quote]
请问怎样为下载代码做session同步?
「已注销」 2012-10-31
  • 打赏
  • 举报
回复
根据楼主的描述,你是在下载中刷新才会有异常,如果不刷新就没有异常了,对吧?
不知道你的下载代码有没有做session同步?没有的话就同步吧
simplexc 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
while ((i = in.read()) != -1) {
out.write(buffer,0,i);//为什么不用这个write方法?buffer是缓存大小,自己定义1024的倍数都可以
}
[/Quote]
还是有问题的。
f47180383 2012-10-31
  • 打赏
  • 举报
回复
应该是,中途停止下载,对象里的值被清空了,相当于一个新的对象。你单步调试下。没有试过,只是猜测!
  • 打赏
  • 举报
回复
while ((i = in.read()) != -1) {
out.write(buffer,0,i);//为什么不用这个write方法?buffer是缓存大小,自己定义1024的倍数都可以
}
simplexc 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
意思好像是角标越界 不知道是不是
[/Quote]
我也知道是下标越界了,但如果正常下载,就不会报错,只有中途停止(程序在跑时,取消下载)才会打出这个错。。
嘿嘿121231 2012-10-30
  • 打赏
  • 举报
回复
意思好像是角标越界 不知道是不是
simplexc 2012-10-30
  • 打赏
  • 举报
回复
各位大侠,求助了。。再不顶一下,帖子就沉了。。
simplexc 2012-10-30
  • 打赏
  • 举报
回复
自己顶一下。。
simplexc 2012-10-30
  • 打赏
  • 举报
回复
程序:in = new BufferedInputStream(
new FileInputStream(exportFile.getPath()));
response.reset();
response.setContentType("application/pdf");
String filename = new String(
filePath.getBytes("GBK"), "ISO8859_1").trim();
response.setHeader("Content-Disposition","inline;attachment;filename="+filename);
out = new BufferedOutputStream(response.getOutputStream());
int i = 0;
while ((i = in.read()) != -1) {
out.write(i);
}
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
catch (Exception e)
{
File file;
e.printStackTrace();
}
finally
{
File file;
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
错误信息:
12/10/30 11:01:55 java.lang.ArrayIndexOutOfBoundsException
12/10/30 11:01:55 at java.lang.System.arraycopy(Native Method)
12/10/30 11:01:55 at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:216)
12/10/30 11:01:55 at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:151)
12/10/30 11:01:55 at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:66)
12/10/30 11:01:55 at java.io.BufferedOutputStream.write(BufferedOutputStream.java:79)
dw_java08 2012-10-30
  • 打赏
  • 举报
回复
把你的代码提出来看一下,然后把整个报错信息都提出来。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧