在json数组中创建json对象时,java内存不足
我用java创建了一个web服务来返回json数据。好的,小数据没有问题,但是当我处理大数据时,它会返回内存不足错误
请参阅我的代码:
public void getImages() throws Exception {
JSONObject o = new JSONObject();
JSONArray jsonArray = new JSONArray();
try {
Class.forName(DRIVERNAME);
conn = DriverManager.getConnection(URL, USER, PASS);
Statement s = connection.createStatement();
ResultSet r = s.executeQuery("select * from images");
while (r.next()) {
JSONObject obj = new JSONObject();
obj.put("id", r.getInt("id"));
byte[] iBytes = r.getBytes("image");
String iBase64 = DatatypeConverter.printBase64Binary(iBytes);
obj.put("image", iBase64);
jsonArray.put(obj);
}
o.put("images", jsonArray);
} catch (SQLException e) {
}
}
在jsonArray中添加图像时发生内存不足(java.lang.OutOfMemoryError:java堆空间):
byte[] iBytes = r.getBytes("image");
String iBase64 = DatatypeConverter.printBase64Binary(iBytes);
obj.put("image", iBase64);
你知道怎么解决这个问题吗
# 1 楼答案
使用Jackson库中的流json(ObjectMapper、JsonFactory、JsonGenerator)解决您的问题。请参见下面的代码:
# 2 楼答案
为什么不简单地将url返回到图像,让浏览器提取该资源?我不太明白通过json响应传递它的好处,因为您需要java在发送图像集之前将其保存在内存中