2011-06-23 32 views
2

我写下载的servlet,读取HTML文件,就在文件的传输是添加一些垃圾数据这方面有任何建议写入servletOutputStream,问题,的BufferedOutputStream写入垃圾数据

下面

是代码我现在用这个


 int BUFFER_SIZE = 1024 * 8; 
     servOut = response.getOutputStream(); 
     bos  = new BufferedOutputStream(servOut); 
     fileObj = new File(file); 
     fileToDownload = new FileInputStream(fileObj); 
     bis = new BufferedInputStream(fileToDownload); 
     response.setContentType("application/text/html"); 
      response.setHeader("ContentDisposition","attachment;filename="+dump+".html"); 
     byte[] barray = new byte[BUFFER_SIZE]; 
     while ((bis.read(barray, 0, BUFFER_SIZE)) != -1) { 
      bos.write(barray, 0, BUFFER_SIZE); 
     } 
     bos.flush(); 

回答

3

bis.read返回读取的字节数。您需要在拨打write电话时考虑到这一点。

喜欢的东西:

int rd; 
while ((rd=bis.read(...)) != -1) { 
    bos.write(..., rd); 
} 
3

的问题是你的代码的以下部分:

 while ((bis.read(barray, 0, BUFFER_SIZE)) != -1) { 
      bos.write(barray, 0, BUFFER_SIZE); 
     } 

你总是写出的BUFFER_SIZE字节的倍数,即使大小的输入不是BUFFER_SIZE的倍数。这会导致垃圾被写入最后一个块的末尾。

您可以修复它,如下所示:

 int read; 
     while ((read = bis.read(barray, 0, BUFFER_SIZE)) != -1) { 
      bos.write(barray, 0, read); 
     } 
+0

愚蠢的基本小错误,我做,,日Thnx –

+0

如果你觉得这个答案,因为解决方案。标记它是正确的。 –