2011-06-30 70 views
0

我在Spring MVC中使用FileInputStream將一個文件塊讀入一個byte []緩衝區。Spring FileInputStream緩衝區偶爾包含不正確的字符

然後我寫入(使用FileCopyUtils.copy)緩衝區到響應流。

我注意到寫入流(用戶收到的)的響應看起來與文件類似,但有瑕疵。

  1. 在文件數據之前,文件頂部有一個'2000'(不帶引號)。
  2. 這「2000」的字符串是我的整個文件
  3. 偶爾表現爲「0」

這些都不在正在讀取原始文件存在文件結束。任何人都可以幫我擺脫這些,讓我有一個準確的輸出流?

這裏是什麼我不正確輸出中看起來像一個例子:

2000 
a line of data 
a line of data 
a line of data 
a line of data 
a line of data 
a line of data 
a line o 
2000 
f data 
a line of data 
2000 

a line of data 
a line of data 
0 

它應該僅僅是:

a line of data 
a line of data 
a line of data 
a line of data 
a line of data 
a line of data 
a line of data 
a line of data 
a line of data 
a line of data 

謝謝!

回答

2

我的猜測是,流被指定爲chunked transfer encoding和你簡單的讀它是

+0

謝謝。我如何改變這種編碼?我目前正在從提琴手測試。是否有需要添加的請求標題?我指定:User-Agent:Fiddler Host:localhost:8443 Content-Length:109 Content-Type:application/x-www-form-urlencoded。 – kmehta

+0

跟進:或者我不需要更改此編碼?這只是一個提琴手假陽性?如果我按原樣離開編碼,我的應用程序是否知道如何處理響應?我正在寫一個iOS應用程序,並且想知道NSURLConnection API是否支持這個。似乎應該。無論如何。感謝您的評論。 +1 – kmehta

0

您能否從Apache Commons IO嘗試IOUtils.copy()

IOUtils.copy(new FileInputStream("some.file"), servletResponse.getOutputStream()); 

很難從你的代碼告訴,但最有可能你有一個錯誤的地方,而從一個地方將數據複製到另一個(折射率失/缺少衝洗等)使用現成的,並經過嚴格測試的流複製定期查明問題。

2

沒事做的FileInputStream。這在傳輸到客戶端時發生。可能是由棘輪怪胎建議的分塊編碼。在客戶端使用HttpURLConnection,它將無形地處理給你。

+0

+1謝謝。回答棘手的怪胎是第一次,但我很欣賞這種迴應。任何熟悉iOS?你知道NSURLConnection是否支持編碼類型分塊? – kmehta