Jersey 客户端如何在不引起内存问题的情况下处理巨大的负载?

How could a Jersey client handle a huge payload without causing a memory issue?

我必须编写一个 Jersey 客户端来处理巨大的有效负载 (>1GB),但问题是如果我使用 java 对象模型,则会出现内存错误。我正在考虑使用 Jackson streaming API,但我很困惑它仍然会在内存中缓冲并占用超过 1 GB space。有人可以解释流式传输在客户端的工作原理吗?

Jackson Streaming API 对于服务器端和客户端都是相同的。它可以非常高效,但它比 Databind API 的工作要多得多,因为你必须自己编写一堆这样的工作。 (参见 Jackson Performance

在功能上,您希望将输入留在流中并逐个解析(和处理)它。如果你知道结构或者它恰好是一个数组,理论上你可以一个一个地处理数组中的每个对象,以避免在处理之前必须读取整个数组。

JsonFactory factory = ObjectMapper.getJsonFactory();

try(JsonParser parser = factory.createJsonParser(inputStream)) {

    while(parser.nextToken() != JsonToken.END_OBJECT) {
        // process tokens, etc. here
    }
}