Java中的強大武器——對象的序列化

來源:互聯網
上載者:User

標籤:

所謂對象序列化就是將對象的狀態轉換成位元組流,以後可以通過這些值再產生相同狀態的對象。這個過程也可以通過網路實現,可以先在Windows機器上建立一個對象,對其序列化,然後通過網路發給一台Unix機器,然後在那裡準確無誤地重新“裝配”。是不是很神奇。

 

也許你會說,只瞭解一點點,但從來沒有接觸過,其實未必如此。RMI、Socket、JMS、EJB你總該用過一種吧,彼此為什麼能夠傳遞Java對象,當然都是對象序列化機制的功勞。

 

第一次使用Java的對象序列化是做某項目,當時要求把幾棵非常複雜的樹(JTree)及相應的資料儲存下來(就是我們常用的儲存功能),以便下次運行程式時可以繼續上次的操作。

 

那時XML技術在網上非常的熱,而且功能也強大,再加上樹的結構本來就和XML儲存資料的格式很像。作為一項對新技術比較有興趣的我當然很想嘗試一下。不過經過仔細分析,發現如果採用XML儲存資料,後果真是難以想象:哪棵樹的哪個節點被展開、展開到第幾級、節點當前的屬性是什麼。真是不知該用A、B、C還是用1、2、3來表示。

 

還好,發現了Java的對象序列化機制,問題迎刃而解,只需簡單的將每棵樹的根節點序列化儲存到硬碟上,下次再通過還原序列化後的根節點就可以輕鬆的構造出和原來一模一樣的樹來。

 

其實儲存資料,尤其是複雜資料的儲存正是對象序列化的典型應用。最近另一個項目就遇到了需要對非常複雜的資料進行存取,通過使用對象的序列化,問題同樣化難為簡。

 

對象的序列化還有另一個容易被大家忽略的功能就是對象複製(Clone),Java中通過Clone機制可以複製大部分的對象,但是眾所周知,Clone有深層Clone和淺層Clone,如果你的對象非常非常複雜,假設有個100層的Collection(誇張了點),如果你想實現深層Clone,真是不敢想象,如果使用序列化,不會超過10行代碼就可以解決。

 

還有就是Swing組件,如果你有兩個很象很象(或是一模一樣)的比較難以構造的Swing組件,你該怎麼辦,也許你想到了Clone,但是偏偏Java的Swing組件沒有提供Clone方法。別急,使用序列化,6行代碼搞定:

 

ByteArrayOutputStream

byteOut = new ByteArrayOutputStream();  

ObjectOutputStream out

= new ObjectOutputStream(byteOut);  

out.writeObject(combo);  

 

ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());  

ObjectInputStream in

=new ObjectInputStream(byteIn);  

JComboBox comb2 = (JComboBox)in.readObject();

 

雖然Java的序列化非常簡單、強大,但是要用好,還有很多地方需要注意。比如曾經序列化了一個對象,可由於某種原因,該類做了一點點改動,然後重新被編譯,那麼這時還原序列化剛才的對象,將會出現異常。

 

你可以通過添加serialVersionUID屬性來解決這個問題。如果你的類是個單態(Singleton)類,是否允許使用者通過序列化機制複製該類,如果不允許你需要謹慎對待該類的實現。

Java中的強大武器——對象的序列化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.