【问题标题】:Getting out of memory error while downloading multipart file using ByteArrayDataSource使用 ByteArrayDataSource 下载多部分文件时出现内存不足错误
【发布时间】:2017-02-09 09:10:37
【问题描述】:

我在下载Java 中的多部分文件时遇到内存不足 问题。

我正在使用 HttpUrlConnection 下载文件在第一行出现问题:

ByteArrayDataSource ds = new ByteArrayDataSource(con.getInputStream(),
                "multipart/mixed");           //Line 1
MimeMultipart multipart = new MimeMultipart(ds);          //Line 2
        javax.mail.BodyPart jsonPart = multipart.getBodyPart(1); //Line 3
        javax.mail.BodyPart videoPart = multipart.getBodyPart(2);  //Line 4

多部分响应包含 2 个不同的文件,一个是简单的文本文件,一个是视频文件。

整个多部分响应大小超过 1 GB。

【问题讨论】:

  • 哪一行报错了?您可能需要逐步处理流,而不是尝试一次全部读取。
  • 你指定内存分配Xmx值吗?您可以参考:stackoverflow.com/questions/14763079/…
  • @shmosel ByteArrayDataSource ds = new ByteArrayDataSource(con.getInputStream(), "multipart/mixed");这一行给出错误。是的,我知道,但我没有得到适当的解决方案来增量读取流
  • @PavanKumar 是的,我已经指定了 Xms 内存分配,但它仍然给了我内存不足的错误。
  • @pash 您可以指定-Xmx2g 这是上限。 Xms 可能不会在这里引起问题。

标签: java file multipart


【解决方案1】:

除非确保它很小,否则不应将整个输入流加载到字节数组中。您可以通过将文件临时保存到本地文件系统来做到这一点。对于大文件,您需要找到替代解决方案。要么不允许,要么将其流式传输到支持流式传输的目的地。即 JMS 队列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多