2017-08-07 46 views
0

我正在使用這段標準代碼,但它給出了內存不足。嘗試谷歌番石榴Bytestream.toArray,甚至IOUtils.toByteArray但沒有運氣。目的是獲取大型二進制文件的輸入流的長度,以進一步處理輸入流。還有一個使用文件系統的限制。Java獲取大輸入流的大小給出內存不足

byte[] data = new byte[4096]; 
while ((nRead = is.read(data, 0, data.length)) != -1) { 
    buffer.write(data, 0, nRead); 
} 
+2

如果你打算在內存中保存大量數據(這通常不是一個好主意),那麼你需要大量的內存。要麼爲JVM提供更多內存,要麼提出更智能的設計。 – Kayaman

+0

我在尋找更智能的設計:-)。一種選擇可能是將輸入流保存在文件系統上,但不幸的是我不能使用這個選項。我有一個約束,我需要計算輸入流的長度,然後對該輸入流執行某些操作。 – Gopal

+0

如果你唯一的目標是找到總大小,那你爲什麼要把整個事情放在記憶中?您是否將您寫入緩衝區的數據保留以備後用? – litelite

回答

1

如果讀取該文件是不是一種選擇,它來自多要求,你可以嘗試使用content-length頭。

另一種選擇是強制客戶端爲文件提供文件大小,因此您不需要將其加載到內存中。請注意,只有您的API客戶端是可信的,這纔有意義。

+0

content-disposition標頭也是一個選項,如另一個堆棧溢出所示https://stackoverflow.com/a/11317380/4374481 – Palamino

相關問題