我在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. 如何快速写入大量数据转化为txt文件
- 2. 在文本文件中写入大量数据的最快方法Java
- 3. 将文件快速写入文件
- 4. 在python中写入大量文件,最后明显减速
- 5. 快速读取和写入数据到文件
- 6. Python快速读取和写入文件
- 7. 快速读取大量文件
- 8. gzip在写入文件中的大量数据时失败
- 9. 如何快速将大型CSV文件导入数据库
- 10. 如何快速填写大量熊猫填充数据?
- 11. 快速导入大型数据库
- 12. 快速写入JEditorPane
- 13. 将大量数据从内存写入文件的最快方法是什么?
- 14. 从python中的大型数据框中快速采样大量的数据
- 15. 有没有办法在Eclipse中快速大写变量名
- 16. 快速分析大量的UTF-8文本文件在Haskell
- 17. 将CEL事件写入数据库的速度有多快?
- 18. 接受数据库写入速度比数据库实际写入更快
- 19. 如何快速搜索大文本行分隔数据文件?
- 20. 在SQL Server中快速,高容量的数据输入
- 21. 将字节数组写入文件的快速方法
- 22. 快速grep在巨大的csv文件
- 23. 在R中快速加载较大数据的软件包
- 24. 将android logcat数据写入文件
- 25. Visual Basic 2010快速写入
- 26. 嵌入式数据库与拍摄快速多次写入
- 27. 快速跨平台算法读取/写入文件在C + +
- 28. 在线文件存储,支持webdav快速读取和写入
- 29. PowerShell快速搜索大量文件中的短语
- 30. 如何将二进制数据写入文件以便快速读取?
我认为你不会永远写入这么多的数据量。那么你可能会考虑AsyncTask?它需要一些时间,但它应该处理所有的数据。 – DuKes0mE 2013-04-28 20:03:06