2012-01-31 69 views
1

我有一個讀取BINARY文件並將其發送給客戶端的servlet。讀取二進制文件爲byte []並從servlet發送爲char []

byte[] binaryData = FileUtils.readFileToByteArray(path); 
response.getWriter().print(new String(binaryData)); 

它適用於非BINARY文件。當我有一個BINARY文件時,我得到receive file length bigger than origin or received file not the same。我如何讀取和發送二進制數據?

謝謝。

回答

8

不是通過Writer。作者爲文本數據,而不是二進制數據。您當前的代碼嘗試使用系統默認編碼將任意二進制數據解釋爲文本。這是一個非常糟糕的主意。

你想要的輸出流 - 所以使用response.getOutputStream(),並寫入二進制數據是:

response.getOutputStream().write(FileUtils.readFileToByteArray(path)); 
+0

男人,你太棒了! – 2012-01-31 19:42:46

4

不要使用Writer,它會增加你的字符編碼,並不會有永遠是一個1:1映射(正如你所經歷的那樣)。請直接使用OutputStream。

如果您不需要它,請避免閱讀完整內容。提供許多並行請求會快速消耗內存。 FileUtils有這方面的方法。

FileUtils.copyFile(path, response.getOutputStream()); 
+0

這是我的第二個問題的答案,關於在標題中自動添加字符集。謝謝! – 2012-01-31 20:06:47