亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確序列化/反序列化 Java Object[]?

如何正確序列化/反序列化 Java Object[]?

慕妹3146593 2021-12-18 09:51:36
我正在編寫一個 rpc 框架,但面臨有關序列化的問題。你知道在客戶端和服務器之間轉換請求,我應該有一個這樣的請求類:class Request {    // target service class    private Class<?> targetService;    // target service method    private String targetMethod;    // target method param types    private Class<?>[] targetParamTypes;    // the params    private Object[] targetParams;    // getters & setters & contructors}但:對于該targetParams領域,如果我使用 Gson 作為序列化工具,com.google.gson.internal.LinkedTreeMap cannot be cast to the.packages.to.MyClass如果我將 POJO 放入 中targetParams,對于通用問題,它會出錯。對于int類,Gson 總是將其解析為 a Double,所以我不能使用targetParamTypes[i].cast(targetParams[i])強制將其強制轉換為 Integer(Double 不能轉換為 Integer),它很糟糕...那么有人有解決問題的方法嗎?如何使序列化/反序列化步驟快速準確?或者有什么推薦的工具嗎?我努力了:Gson,之前遇到的問題Kyro,編解碼器系統很爛,我不知道如何序列化/反序列化 HashMap ......protostuff,嗯,它不支持 Java 9+,我的環境是 Java 11,糟糕!所以有什么建議嗎?
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

你可以看看杰克遜。Jackson'sObjectMapper應該能夠從您的Request對象轉換為String,反之亦然。


編輯:添加示例


請求實體:


class Request {


    private Class<?> targetService;

    private String targetMethod;

    private Class<?>[] targetParamTypes;

    private Object[] targetParams;


    // needed by Jackson

    private Request(){


    }


    public Request(Class<?> targetService, 

                   String targetMethod, 

                   Class<?>[] targetParamTypes, 

                   Object[] targetParams) {

        this.targetService = targetService;

        this.targetMethod = targetMethod;

        this.targetParamTypes = targetParamTypes;

        this.targetParams = targetParams;

    }


    // getters and setters, needed by Jackson


}

序列化/反序列化示例:


public static void main(String[] args) throws IOException {

    ObjectMapper mapper = new ObjectMapper();


    Request req = new Request(String.class, "test", new Class[] {String.class}, new Object[] {"Test"});

    String serialized = mapper.writeValueAsString(req);

    System.out.println(serialized);


    req = mapper.readValue(serialized, Request.class);

    System.out.println(req);

}


查看完整回答
反對 回復 2021-12-18
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

使用 JSON 而不是 GSON 并在你的 pojo 中實現 Serializable


查看完整回答
反對 回復 2021-12-18
  • 2 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號