我收到一个 JSON DTO,其中一个字段包含 b64 文件。
该文件可能相当大(100MiB+ - 不要问),我尝试将其作为 JSON 中的流读取,以减少内存负载。 JSON 本身只有三个不同的字段,非常小。
请注意,我已经能够将 JSON 本身作为流读取并迭代其标记,但我无法将值本身作为流检索。
基本的
JsonParser.getText(writer)
会执行 .getText
将所有内容加载到内存中,并且每个解决方案似乎总是在某个时刻将整个值加载到内存中(或者也许我的 google-fu 没有达到标准)。
是的,您可以使用不加载整个 JSON int 内存的方法
while (!jsonParser.isClosed()) {
JsonToken token = jsonParser.nextToken();
// process the tokens one by one
}
这不会将整个 JSON 加载到内存中,而是按顺序处理字段和值等标记。
另一种选择是使用 GSON,但您已经使用 Jackson。有了 GSON 就可以了
while (jsonReader.hasNext()) {
String name = jsonReader.nextName(); // Get field name
// Depending on the type of the value, process it
if (reader.peek().name().equals("STRING")) {
String value = reader.nextString();
} else if (reader.peek().name().equals("NUMBER")) {
double value = reader.nextDouble();
}
// etc. you process one by one
}
GSON 的界面更加时尚。