熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

JavaIO 6—對象的序列化

2013-11-23 18:38:43  來源: Java核心技術 

  對於對象的序列化可能很多初學者不熟悉希望通過這篇文章你對對象的序列化有一個大概的了解

  對象序列化指的是將對象轉換為字節流保存起來並在日後還原這個對象

  可能我們認為這個有什麼用處啊這個可以將我們的對象保存在存儲設備上並且可以永久的保存另外我們有時候需要在網絡上傳輸一個對象這個也是將對象序列化之後通過網絡發送出去然後再通過反序列化還原成為原來的對象

  一個對象要想能夠實現序列化必須實現Serializable接口或Externalizable接口

  Serializable我們可以通過查看Java API發現這個接口沒有任何方法所以這個接口就是一個標識接口實現這個接口就是為了告訴jvm這個類的對象可以序列化

  我們可以利用Java給我們提供ObjectOutputStream和ObjectInputStream這兩個類實現對象的序列化和反序列化下面看一個例子

  //aaaa

  bbbb

  上面的程序中我們定義了一個帶參數的方法那麼我們就會想在對象反序列化的時候會去調用構造方法構建對象嗎?答案是不會去調用對象的構造方法而是根據序列化的數據直接生成對象

  不是對象的所有的東西都可以序列化的

  當一個對象被序列化時只保存對象的非靜態成員變量不能保存任何的成員方法和靜態的成員變量如果一個對象的成員變量是一個對象那麼這個對象的數據成員也會被保存如果一個可序列化的對象包含對某個不可序列化的對象的引用那麼整個序列化操作將會失敗並且會拋出一個NotSerializableException我們可以將這個引用標記為transient那麼對象仍然可以序列化

  我們仔細看剛才的代碼我們在我們創建的線程前面加上了transient說明線程對象是不序列化的

  有時候我們需要對一些數據進行加密然後再序列化然後反序列化的時候在調用相應的方法解密這時候我們可以調用兩個方法writeObject和readObject這兩個方法可以按照我們的自己需要的方法和順序去序列化對象然後再反序列化下面的例子是修改了上面的例子中的一點東西看完了你就知道這兩個方法怎麼用了

  //Write Object

  Write Object

  Read Object

  aaaa

  Read Object

  bbbb從結果中我們可以看出在我們序列化和反序列化的時候調用了我們自己寫的方法

  如果哪裡錯誤還請指出


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25513.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.