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

關於java中的對象序列化

2013-11-23 18:42:26  來源: Java核心技術 

  java對象序列化機制一般來講有兩種用途
  
    需要將對象的狀態保存到文件中而後能夠通過讀入對象狀態來重新構造對象恢復程序狀態
  
    使用套接字在網絡上傳送對象的程序來說是很有用的
  
    我們通過讓類實現javaioSerializable 接口可以將類序列化這個接口是一個制造者(marker)接口也就是說對於要實現它的類來說該接口不需要實現任何方法它主要用來通知Java虛擬機(JVM)需要將一個對象序列化
  
    對於這個有幾點我們需要明確
  
    並非所有類都可以序列化在cmd下我們輸入serialver socket可以得到socket是否可序列化的信息實際上socket是不可序列化的
  
    java有很多基礎類已經實現了serializable接口比如stringvector等但是比如hashtable就沒有實現serializable接口
  
    將對象讀出或者寫入流的主要類有兩個: ObjectOutputStream與ObjectInputStream ObjectOutputStream 提供用來將對象寫入輸出流的writeObject方法 ObjectInputStream提供從輸入流中讀出對象的readObject方法使用這些方法的對象必須已經被序列化的也就是說必須已經實現Serializable接口如果你想writeobject一個hashtable對象那麼會得到一個異常
  
    下面舉個例子
  
  import javaio*;
  
  public class testser implements Serializable {
   public int ii;
  
   testser()
   {
  
   }
  
   testser( int param )
   {
   ii = param;
   }
  }
  
  
  
    testser是一個實現了serializable接口的類
  
    讀寫這個序列化過的類
  
  import javaio*;
  
  public class Ser {
  
   private static String datafile;
   datafile=serdata;
  
   public static void main( String[] argv )
   {
   Systemoutprintln( Java Serialization Demo );
   SerData data;
   try {
   ObjectInputStream in = new ObjectInputStream
   ( new FileInputStream( datafile ));
   data = (SerData) inreadObject();
   inclose();
   }
   catch (Exception e) {
   data = new testser();
   }
   Systemoutprintln( Original data: ii = + dataii );
   dataii++;
   try {
   ObjectOutputStream out = new ObjectOutputStream
   ( new FileOutputStream( datafile ) );
   outwriteObject( data );
   outflush();
   outclose();
   }
   catch (Exception e) {
   Systemoutprintln( e );
   }
   }
  }
  
  
  
    還有可以通過套接字傳遞序列化對象大概類似
  
    看到這裡或許很多人都會有個疑問是否所有的對象都可以序列化呢?
  
    當然是不可以的了至於為什麼不可以那就有很多原因了比如:
  
    安全方面的原因比如一個對象擁有privatepublic等field對於一個要傳輸的對象比如寫到文件或者進行rmi傳輸等等在序列化進行傳輸的過程中這個對象的private等域是不受保護的
  
    資源分配方面的原因比如socketthread類如果可以序列化進行傳輸或者保存也無法對他們進行重新的資源分配而且也是沒有必要這樣實現
  

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

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