2

我已经使用 gson 将 json 解析为 java 对象。

将 Json 转换为 Java 示例代码

现在我在 eclispe 中面临堆内存问题,与: Java heap space with GSON 相同

正如我提到的gson-streaming文章一样

  1. gson 流式传输
  2. gson-streaming-to-read-and-write-json

两者都有关于流媒体的讨论,例如,

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) 我怎样才能在这样的请求对象上进行流式传输?或任何其他可用的替代方案?让我知道仍有任何疑问。

4

0 回答 0