我已经使用 gson 将 json 解析为 java 对象。
现在我在 eclispe 中面临堆内存问题,与: Java heap space with GSON 相同
正如我提到的gson-streaming文章一样
两者都有关于流媒体的讨论,例如,
Gson 流处理速度很快,但难以编码,因为您需要处理处理 JSON 数据的每一个细节。
我已使用通信对象进行客户端和服务器通信。通信结构是这样的
class CommunicationObject
{
//Other variables
IsBean isBean; //Interface of hibernate entity bean
//Getter & setter methods
}
在访问任何单个实体 bean 时,这里的 isBean 作为泛型。没有案例
->Do login logic then isBean has a user object
->Get organization then isBean has a Organization object.
...
etc
处理请求方法的代码:
public String processFacadeActionTest(String requestJson) {
Gson gson = new GsonBuilder().registerTypeAdapter(IsBean.class, new InterfaceAdapter<IsBean>())
.create();
CommunicationObject requestObj=null;
try{
requestObj=gson.fromJson(requestJson, CommunicationObject.class);
}catch (Exception e) {
e.printStackTrace();
}
FacadeActionHandler actionHandler=new FacadeActionHandler();
CommunicationObject responseObj = actionHandler.handleRequest(requestObj);
String returnString="";
try{
//TODO:Comment Bhumika heap space issue
returnString=convertIntoJson(responseObj);
return returnString;
}catch (Exception e) {
e.printStackTrace();
}
return returnString;
}
将对象转换为 json
private String convertIntoJson(CommunicationObject obj) throws IOException
{
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(outputStream);
writeJsonStream(out, obj);
return outputStream.toString();
}
使用 gson 进行流式传输
private void writeJsonStream(OutputStream out,CommunicationObject communicationObject) throws IOException {
JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
writer.setIndent(" ");
writer.beginArray();
Gson gson = new GsonBuilder().registerTypeAdapter(IsBean.class, new InterfaceAdapter<IsBean>())
.create();
gson.toJson(communicationObject, CommunicationObject.class, writer); //Hear stuck how to map isBean object
writer.endArray();
writer.close();
}
我被困在gson.toJson(communicationObject, CommunicationObject.class, writer) 我怎样才能在这样的请求对象上进行流式传输?或任何其他可用的替代方案?让我知道仍有任何疑问。