我在Java中遇到了一個問題,我一直在進行大約一週的時間。我試圖找到一種有效的方式,可以在不丟失數據的情況下,每秒在外部存儲上寫入90-120MB的數據。在我的測試中,我已經獲得了18-20MB/s這是外部存儲器的正常速度範圍,但是由於Android每個進程的堆爲140MB-256MB(使用largeHeap標記,我最多可獲得138MB),因此無法做出大的有足夠的緩衝區可以使用Java鏈接列表或數組保持數據的完整性(數據以90 + MB/s生成)。 JNI是一個很好的選擇,可以創建一個足夠大的循環數組或鏈表來在文件寫入時保持數據?我看到另一篇文章,其中有人建議在單獨的進程中運行服務以獲得「額外」內存。我只是擔心序列化會減慢生成的數據的傳輸速度。我已經沮喪地刪除了我的所有代碼。提前致謝。在Android中快速寫入大量數據文件
回答
要寫90-120 MB/s,你需要一個支持這個數據速率的設備。注意:典型的硬盤驅動器無法做到這一點。
您可以添加一些額外的緩衝,但這是不可持續的。相反,我建議您找到一種方法,用較少的數據編寫相同的信息。例如通過壓縮數據。
順便說一句,JNI不會讓你的設備運行得更快,或給你更多的內存。
謝謝,我認爲緩衝區在滿了之後會運行,因爲它不能從字面上趕上至少比數據給出的速度慢70MB/s。我需要分配一個至少有180MB大小的緩衝區,看起來只有C允許。我會研究壓縮比如gzip或其他數據。 – LKD 2013-04-28 20:42:00
2秒鐘後,180 MB緩衝區將會填滿。我不明白爲什麼a)你需要它,因爲操作系統應該爲你緩衝未提交的寫入,b)不能在Java中分配180MB的緩衝區。如果你沒有這麼多的堆,你可以使用堆/本機/直接內存。或者甚至更好的是,你可以使用內存映射文件,這個文件既可以作爲一個大堆堆緩衝區使用,也可以用來寫入數據。 – 2013-04-28 20:50:25
順便說一句,你的設備有多少可用內存。顯然你不能分配一個比這更大的有用緩衝區。 – 2013-04-28 20:52:03
- 1. 在C++中將大量數據快速寫入ascii文件
- 2. 如何快速寫入大量數據轉化爲txt文件
- 3. 在Android中快速發送大文件
- 4. 在C++中快速寫入很多大文件
- 5. 在文本文件中寫入大量數據的最快方法Java
- 6. 將文件快速寫入文件
- 7. 在python中寫入大量文件,最後明顯減速
- 8. 快速讀取和寫入數據到文件
- 9. 加快數據庫寫入速度
- 10. 快速更新大量數據
- 11. 快速處理大量數據
- 12. 如何快速顯示大量數據
- 13. Python快速讀取和寫入文件
- 14. 快速讀取大量文件
- 15. 如何快速將大型CSV文件導入數據庫
- 16. gzip在寫入文件中的大量數據時失敗
- 17. 如何快速填寫大量熊貓填充數據?
- 18. 快速導入大型數據庫
- 19. 快速讀取/寫入大數據的方法
- 20. 快速寫入JEditorPane
- 21. 快速大數據轉軸
- 22. 最佳(NoSQL?)數據庫適用於小文檔/記錄,不變數據,大量寫入,快速讀取?
- 23. 將大量數據從內存寫入文件的最快方法是什麼?
- 24. 快速更換大文件
- 25. 在Android中快速處理zip文件
- 26. Powershell - 將大量文本寫入文件的最快方法
- 27. 從python中的大型數據框中快速採樣大量的數據
- 28. 在matlab中導入多個大文件的快速方法
- 29. 有沒有辦法在Eclipse中快速大寫變量名
- 30. 快速分析大量的UTF-8文本文件在Haskell
我認爲你不會永遠寫入這麼多的數據量。那麼你可能會考慮AsyncTask?它需要一些時間,但它應該處理所有的數據。 – DuKes0mE 2013-04-28 20:03:06