簡體   English   中英

番石榴不可變集合的序列化是否穩定?

[英]Is the serialization of Guava immutable collections stable?

我被警告不要在序列化通信中使用的對象中使用Guava不可變集合,因為如果更新了一端的Guava版本,則可能存在序列化版本不兼容問題。 這是一個有效的問題嗎?

讓我們來看一些觀點。

序列化最突出的用途是:

  1. 在應用程序的運行之間存儲數據
  2. 在客戶端和服務器之間發送數據

如果您控制在客戶端和服務器上使用哪個Guava版本,Guava對應用程序2來說完全沒問題。 此外,雖然Guava不保證Guava版本之間序列化的一致性......但實際上,序列化形式並不經常變化。

另一方面,讓我給出一些觀點,說明為什么Guava不能保證序列化表格的一致性。 我在Guava版本9和10之間更改了ImmutableMultiset的序列化形式,之所以是因為我需要重構事物,所以我可以將ImmutableSortedMultiset添加到不可變集合中。 你可以在這里看到變化。 試圖在保持序列化形式一致的同時進行同樣的重構幾乎肯定需要額外的笨拙黑客攻擊,這對於Guava團隊的理念非常強烈。 (它可能比我自己更專業的程序員可行,但我仍然聲稱它不會是微不足道的。)保證長期的序列化兼容性需要大量的工作量,如上面鏈接的郵件列表中所討論的線程 ,凱文說:

試圖提供跨版本兼容性使得事情變得困難了一百倍 ,我們在Guava開始之前放棄了它。

和賈里德:

根本問題仍然存在:確保序列化表單在所有Guava版本之間兼容。 在為Google Collections 1.0工作時,這是我的目標,但在意識到它的難度后我放棄了這個目標。 實現和測試跨版本兼容性並不值得。

最后,我會指出Guava在整個地方被Google內部使用並且管理得非常好。

是的,這是一個有效的問題。

來自Guava項目主頁(http://code.google.com/p/guava-libraries/):

ALL對象的序列化形式可能會發生變化。 不要堅持這些並假設它們可以被未來版本的庫讀取。

如果您使用的是Java本機序列化,那么Guava不是一個好選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM