如题,我在文件下载时按下F5 刷新,后台报错java.lang.ArrayIndexOutOfBoundsException
显示是write(i)这一行。。请各位大侠帮帮忙,怎样解决
本人菜鸟……

解决方案 »

  1.   

    程序: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)
      

  2.   

     while ((i = in.read()) != -1) {
      out.write(buffer,0,i);//为什么不用这个write方法?buffer是缓存大小,自己定义1024的倍数都可以
      }
      

  3.   

    根据楼主的描述,你是在下载中刷新才会有异常,如果不刷新就没有异常了,对吧?
    不知道你的下载代码有没有做session同步?没有的话就同步吧
      

  4.   

    请问怎样为下载代码做session同步?
      

  5.   

    你这种情况应该是下载代码所属的类是单例的,出现了多线程问题。
    就是让你的下载代码在同一个session中串行化,也就是在同一个session中下载代码不能并行执行。
    在下载代码中:
    获取session,对session加锁。
    synchronized (session) {
    //下载代码放在这里      
    }