1

java.lang.OutOfMemoryError打电话时如何排除

new JSONObject(longAndMalformedJSONString)

我正在使用 JSON 解析器的 org.json 实现。

我不是在寻找一种方法来解码坏的 JSON 字符串。我只想对内存使用量(可能还有 CPU 使用量)设置一个上限,并且可能会得到一个我可以从中恢复的异常。

或者,是否可以肯定地说,解析时的内存使用量与输入字符串长度相比永远不会超过某个比例?然后我可以限制它。

或者是否有提供该功能的替代库?

4

1 回答 1

2

读取序列化数据(JSON、XML 等)时有两种方法:解析整个输入并将对象保存在内存中,或者通过提供的 API 导航流并保留您感兴趣的部分。它似乎 org.json 没有流式 API,但是像Gson 这样的更复杂的库有:

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
List<Message> messages = new ArrayList<Message>();
reader.beginArray();
while (reader.hasNext()) {
  Message message = gson.fromJson(reader, Message.class);
  messages.add(message);
}
reader.endArray();
reader.close();

您还可以对输入进行限制,但这取决于您用于传输 JSON 有效负载的协议

于 2015-11-04T11:31:52.533 回答