调用时如何排除java.lang.OutOfMemoryError
new JSONObject(longAndMalformedJSONString)
我正在使用 JSON 解析器的 org.json 实现。
我并不是在寻找一种方法来解码错误的 JSON 字符串。我只是想对内存使用(可能还有 CPU 使用)设置一个上限,也许会得到一个可以恢复的异常。
或者,可以肯定地说,解析时的内存使用量与输入字符串长度相比永远不会超过一定比例吗?然后我就可以限制它。或者是否有其他库可以提供该服务?
最佳答案
读取序列化数据(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 负载的协议(protocol)
关于java - 如何在解析 JSON 字符串时限制内存使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33520502/