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

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

當java提供API來執行序列化框架時,什么需要選擇序列化框架?

當java提供API來執行序列化框架時,什么需要選擇序列化框架?

夢里花落0921 2023-08-16 09:47:23
我正在閱讀有關 Avro 的內容,并且正在嘗試比較 avro 與 java 序列化系統。但不知怎的,我無法判斷為什么 avro 用于數據序列化而不是 java 序列化。事實上,為什么要出現另一個系統來取代java序列化系統呢?以下是我的理解的總結。要使用 java 序列化功能,我們必須使此類實現可序列化接口。如果您這樣做并序列化對象,那么在反序列化期間,類似e = (Employee) in.readObject();接下來我們可以使用 getter/setter 來處理員工對象。在 avro 中,首先是模式定義。接下來是使用 avro API 進行序列化。再次關于反序列化,有類似的事情。接下來我們可以使用 getter/setter 來處理員工對象。問題是我沒有看到任何區別,只是使用它的 API 不同?誰能澄清我的疑問嗎?public AvroHttpRequest deSerealizeAvroHttpRequestJSON(byte[] data) {DatumReader<AvroHttpRequest> reader     = new SpecificDatumReader<>(AvroHttpRequest.class);    Decoder decoder = null;    try {        decoder = DecoderFactory.get().jsonDecoder(          AvroHttpRequest.getClassSchema(), new String(data));        return reader.read(null, decoder);    } catch (IOException e) {        logger.error("Deserialization error:" + e.getMessage());    }}接下來我們可以使用 getter/setter 來處理員工對象。問題是我沒有看到這兩種方法之間有任何區別。兩者都做同樣的事情。只是 API 不同嗎?誰能幫助我更好地理解這一點?
查看完整描述

1 回答

?
慕田峪4524236

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

內置的 java 序列化有一些相當顯著的缺點。例如,如果不仔細考慮,您可能無法反序列化一個可能沒有更改數據、僅更改了類方法的對象。

您還可以創建一個情況,其中串行 uid 相同(手動設置),但由于兩個系統之間的類型不兼容而實際上無法反序列化。

第三方序列化庫可以通過使用抽象映射將數據配對在一起來幫助緩解這種情況。精心設計的序列化庫甚至可以提供對象不同版本之間的映射。

最后,第三方序列化庫的錯誤處理通常對開發人員或操作員更有用。


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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