2011-06-23 71 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

如果你覺得這個答案,因爲解決方案。標記它是正確的。 –