gpt4 book ai didi

java - 当我基于 json 数组创建 json 对象时内存不足

转载 作者:行者123 更新时间:2023-11-28 21:56:41 24 4
gpt4 key购买 nike

我在 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);

知道如何解决这个问题吗?

最佳答案

使用 Jackson 库中的流 json(ObjectMapper、JsonFactory、JsonGenerator)解决您的问题。请看下面的代码:

public void getImages() throws Exception {

ObjectMapper objectMapper = new ObjectMapper();
JsonFactory jf = objectMapper.getFactory();
JsonGenerator jg = f.createGenerator(new File("c:\\images.json"), JsonEncoding.UTF8);

try {
Class.forName(DRIVERNAME);
conn = DriverManager.getConnection(URL, USER, PASS);

Statement s = connection.createStatement();
ResultSet r = s.executeQuery("select * from images");

jg.writeFieldName("images");
jg.writeStartArray();

while (r.next()) {
jg.writeBinary(r.getBinaryStream("IMAGEM"), -1);
in.close();
}

jg.writeEndArray();
jg.writeEndObject();
jg.close();

} catch (SQLException e) {
//use the exceptions
}
}

关于java - 当我基于 json 数组创建 json 对象时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15070240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com