如何在调用
时排除java.lang.OutOfMemoryError
new JSONObject(longAndMalformedJSONString)
我正在使用JSON解析器的org.json实现。
我没有找到解码错误JSON字符串的方法。我只想对内存使用量(以及可能的CPU使用率)设置一个上限,并且可能会得到一个我可以从中恢复的异常。
或者,或者可以肯定地说,解析时的内存使用量与输入字符串长度相比绝不会超过某个比率?然后我可以限制它。
或者是否有提供该功能的替代库?
答案 0 :(得分:2)
读取序列化数据(JSON,XML,无论如何)时有两种方法:您要么解析整个输入并将对象保留在内存中,要么通过提供的API导航流,您只需保留您感兴趣的部分在。似乎org.json没有流API,但更复杂的库如Gson do:
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有效负载的协议