我需要將一個非常大的文件(1.11gb)讀入內存並以字節爲單位進行處理。我做這件事的唯一方法是使用一個ArrayList(我不能使用一個字節[],因爲那麼它將超出限制)。 沒有辦法讓文件變小(我用它作爲測試來測試我的程序處理數據的時間)。 然後我需要將一個ArrayList作爲一個文件放回到硬盤驅動器(仍然是1.11GB) 我並不擔心寫作,因爲我正在閱讀。 速度也是至關重要的,所以要避免子分段,除非任何人在那裏都有快速的方法。從ArrayList中讀取/寫入文件內容<Byte>
-1
A
回答
3
您試圖以錯誤的方式解決此問題(並且它不會工作)。
解決這個可能的方法是:
重新設計算法,它不需要讀取整個文件到內存......一氣呵成。
將數據讀取到多個
byte[]
對象中以避開2^31
數組大小限制。使用多個
ByteBuffer
對象映射文件;見Java MemoryMapping big files。
1 - 它不會起作用,因爲ArrayList
有Object[]
內,因此是受您與字節數組相同的限制。另外,ArrayList<Byte>
將佔用比代表相同字節數的byte[]
多4至8倍的內存。或者更多,如果用Byte
填充ArrayList<Byte>
對象實例化方式不正確。
2 - 的Buffer
的API都使用int
大小和偏移量,以及(AFAIK)不支持的文件> = 2^31字節映射到單個Buffer
。
相關問題
- 1. 讀取文本文件並從特定內容寫入文件
- 2. 將文件內容讀入ArrayList
- 3. 在java中使用ArrayList寫入和讀取文件(使用ArrayList)
- 4. 如何從TreeSet讀取內容並寫入文件?
- 5. 從io.Writer寫入的內容中讀取內容
- 6. 從文件流中讀取內容c#
- 7. Android。從文件中讀取內容
- 8. 從.epub文件中讀取內容
- 9. 讀/寫文件從內容提供商
- 10. 寫入和從文件中讀取
- 11. NSDocumentDirectory - 寫入並從文件中讀取
- 12. 從python中讀取和寫入文件
- 13. 從python中讀取/寫入android文件
- 14. 從文件中讀取/寫入對象
- 15. 從plist文件中寫入和讀取
- 16. 用c從/中讀取/寫入文件
- 17. 如何在Java中將Arraylist的內容寫入xml文件
- 18. 寫入並讀取ArrayList <File>到Android緩存中
- 19. 寫入和讀取文件中的ArrayList對象
- 20. 在arraylist中讀取和寫入.xls文件
- 21. 讀取文件內容並寫入控制檯
- 22. 讀取文件並將其內容寫入另一個C++
- 23. 讀取和寫入文件的內容10次
- 24. c編程讀取()和寫入()內容到文件
- 25. PHP:讀取現有的xml文件並寫入新內容
- 26. 讀取並寫入特定內容
- 27. 讀取和寫入arraylist到文本文件
- 28. AS3 - 從.ini文件讀取內容
- 29. 將輸入寫入文件並從C++中讀取文件
- 30. 從Jsoup讀取內容後編寫一個xhtml文件
請解釋:_I不能用一個byte []因爲那將超過limit_ –
'ArrayList的'是'的byte []'引擎蓋 –
kaykay
@kaykay不,它不是,它是一個對象下[] 。它使用4或8倍於字節數組的內存。 – immibis