我这样写: public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");

ServletOutputStream sos = response.getOutputStream();
BufferedImage bi=ImageIO.read(new File("imageNotFound.jpg"));
File f = new File("abc.jpg"); 

ImageIO.write(bi,"JPG",sos);
ImageIO.write(bi,"JPG",f);
sos.close();
}输入6.41k的jpeg图片
输出到文件里变成2.56k的jpeg图片
输出到ServletOutputStream里,却变为了25.8k的bmp图片请问为什么啊?怎么解决?谢谢

解决方案 »

  1.   

    不要用Image,直接用FileInputStream读入后写出到你的sos里面去。
      

  2.   

    写成这样?
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    response.setContentType("image/jpeg");

    ServletOutputStream sos = response.getOutputStream();
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("imageNotFound.jpg")),1024);

    int c;
    while((c=bis.read()) != -1)
    sos.write(c);
    bis.close();
    sos.close();
    }还是一样啊,输出26K的BMP图片
    高手麻烦你写一个好不好?谢了
      

  3.   

    try this.没有测试过,以前也没有写过
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    response.setContentType("image/jpeg");ServletOutputStream sos = response.getOutputStream();
    FileInputStream bis = new FileInputStream(new File("imageNotFound.jpg")));Byte c;
    while((c=bis.readByte()) != -1)
    sos.write(c);
    }
    bis.close();
    sos.close();
      

  4.   

    你的close在while循环里面,另外我没有用缓冲,在while((c=bis.readByte()) != -1)
    sos.write(c);
    }中我不知道sos.write(c);能不能输出byte,自己查一下
      

  5.   

    还有while((c=bis.readByte()) != -1)
    sos.write(c);
    }中的}我放错地方了,放到最后
      

  6.   

    什么呀,请认真一点看我的问题好不好我的close哪里有放在循环里请不要带着这种态度来玩弄我的感情问了这么多问题没有几个能得到准确的答复的
    唉,看来CSDN的JAVA版上都只剩下我这种水平的新手在混了
    高手都跑灌水区去讲黄色笑话了