java - 使用 Jersey 发送大型 JAXB 对象会生成 OutOfMemoryError

标签 java jaxb jersey out-of-memory

我使用 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/

相关文章:

java - 我的数字时钟不工作

java - 如何使用 JAXB 将 XML 转换为对象

java - 具有重复名称的 WSDL——如何强制使用 Java 类名称

java - Jersey :一个通用的捕获所有错误的处理程序?

java - 使用 InMemoryTestContainerFactory 时为 JerseyTest 设置 baseUrl

java - 如何解析具有相同名称但位于不同父级下的两个节点?

java - 提高使用 VBO 时所需的内存

java - 我如何在 android studio 中的 Json 解析器中添加一些条件

java - JAX-RS 中的异常处理

java - jersey-all (v.2.22.2) 在系统控制台中生成未解析的包 - AEM 6.2