我使用 Jersey 作为我的 REST 实现,并使用 JAXB 来表示我的类。 我做了一个微小的文件传输机制。在客户端,将文件设置为 JAXB 对象之前将其转换为 BASE64 字符串。然后,JAXB 对象通过 Jersey 发送到服务器。
它适用于不大于 50 MB 左右的文件,但当我尝试发送 500 MB 文件时,我的客户端上收到 OutOfMemoryError
。我已将 -Xms
和 -Xmx
设置为 2048m 但没有帮助,我仍然收到错误。
我该怎么做才能让它处理非常大的文件?
最佳答案
重写整个内容以流式传输文件。不要对其进行 base64 编码,不要使用 JAXB,不要将其嵌入 XML 中。即使文件大小为 900 TB,也能正常工作。如果需要,请在 Jersey 以外实现此操作。 HTTP GET 产生 HTTP 响应,并在正文中传输文件字节。您可以在许多 servlet 教程等介绍中找到实现此功能的示例 servlet。
关于java - 使用 Jersey 发送大型 JAXB 对象会生成 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324947/