首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下载时处理大于2GB的文件

下载时处理大于2GB的文件
EN

Stack Overflow用户
提问于 2022-09-22 08:26:19
回答 1查看 139关注 0票数 -2

我一直试图使用大于2gb的MediaHttpDownloader下载一个文件。下载了一段时间后,我的内存出现了错误。我认为这是由于mediaHttpDownloader试图将其写入Outputstream,因为输出流无法处理这么大的数据。

代码:

代码语言:javascript
复制
MediaHttpDownloader mediaHttpDownloader = new MediaHttpDownloader(HTTP_TRANSPORT, new HttpCredentialsAdapter(credentials));
mediaHttpDownloader.download(requestUrl, outputStream);

错误:

代码语言:javascript
复制
Caused by: java.lang.OutOfMemoryError: null
    at java.base/java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:125)
    at java.base/java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:119)
    at java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:95)
    at java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:156)

会喜欢一些帮助/建议的最好的方式来处理一个非常大的文件下载。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 09:10:09

每获得500 get的调用System.gc(),就从Runtime类获得空闲内存。你只需要在里面放一些代码就行了。此外,对于海量数据,需要在程序命令行中设置使用G1垃圾收集器的参数。https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html注意,使用URLConnection和HttpURLConnection,您可以为setDoInput设置系统并使用流。您还应该在堆和堆栈E.t.c的命令行中共享RAM方案的内存。检查是否在X32或X64中运行,因为x32有有限的内存堆栈分配的可分配堆是最大1mb。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73811502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档