2016-09-27 46 views
0

我在InputStream處理時遇到了問題。我有SpringMVC項目文件上傳。文件是純文本文件。我首先要確保字符編碼,所以我使用流來檢測字符集編碼。然後根據這個編碼我嘗試讀取文件。我的問題是當我檢測到字符集InputStream指針向前移動,所以當我嘗試讀取文件後,它跳過文件的開始。重置Java中文件上載的InputStream

我想我可以將讀取字節添加到某個列表中,而不是首先讀取此列表並繼續流,但我不想結束整個文件在內存中。

如何從文件上傳開始流式傳輸?

回答

1

XY問題。你不需要字符編碼。只需使用流複製傳入數據,而不是ReadersWriters。這樣,無論編碼是什麼,它都被保存下來。

+0

謝謝你的回答,問題是我不想保留編碼。我正在用用戶上傳的數據生成pdf。 PDF是在utf-8中生成的,但用戶使用本地編碼上傳文件。所以我想先檢測編碼。因爲應該將它們轉換爲utf-8格式。 – aios

0

一旦讀取了一些數據,就無法重新啓動流,這是流的功能。 你可以使用任何你喜歡的閱讀器類,例如

new BufferedReader(new InputStreamReader(stream, charset)); 

如果您不知道字符集事先並可以從默認的不同,你會更好的流內容保存到內存中的結構或文件,然後分析它。

+0

謝謝,我最終使用了內存。我將讀取的數據(直到檢測到)保存在字節數組中,然後將它們與SequenceInputStream(byteArrayStream,originalStream)結合成一個流,並使用緩衝讀取器。我希望它不會炸燬記憶。 – aios

+0

是的,你可以。參見'mark()'和'reset()'。 – EJP