我正在閱讀有關 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 相同(手動設置),但由于兩個系統之間的類型不兼容而實際上無法反序列化。
第三方序列化庫可以通過使用抽象映射將數據配對在一起來幫助緩解這種情況。精心設計的序列化庫甚至可以提供對象不同版本之間的映射。
最后,第三方序列化庫的錯誤處理通常對開發人員或操作員更有用。
添加回答
舉報
0/150
提交
取消