首頁 >Java >java教程 >Java實現序列化與反序列化的簡單範例

Java實現序列化與反序列化的簡單範例

黄舟
黄舟原創
2017-01-20 11:13:351383瀏覽

序列化與反序列化是指Java物件與位元組序列的相互轉換,一般在保存或傳輸位元組序列的時候會用到,下面有兩個Java實現序列化與反序列化的簡單範例,不過還是先來看看序列與反序列化的具體概念:

1.Java序列化與反序列化

Java序列化是指把Java物件轉換為位元組序列的過程;而Java反序列化是指把位元組序列恢復為Java物件的過程。

2.為什麼需要序列化與反序列化

我們知道,當兩個進程進行遠端通訊時,可以相互發送各種類型的數據,包括文字、圖片、音訊、視訊等, 而這些數據都會以二進位序列的形式在網路上傳送。那麼當兩個Java進程進行通訊時,能否實現進程間的物件傳送呢?答案是可以的。如何做到呢?這就需要Java序列化與反序列化了。換句話說,一方面,發送方需要把這個Java物件轉換為位元組序列,然後在網路
傳送;另一方面,接收方需要從位元組序列中恢復出Java物件。

當我們明晰了為什麼需要Java序列化和反序列化後,我們很自然地會想Java序列化的好處。其好處一是實現了資料的持久化,透過序列化可以把資料永久地保存到硬碟上(通常存放在檔案裡),二是,利用序列化實現遠端通信,即在網路上傳送物件的位元組序列。

3.範例:
(1)序列化反序列化檔案:

import java.io.*; 
  
@SuppressWarnings("serial") 
class Person implements Serializable { 
  
  public Person(String name, String sex, int age, int height) { 
    this.name = name; 
    this.sex = sex; 
    this.age = age; 
    this.height = height; 
  } 
  
  public String toString() { 
    return "|" + this.name + "|" + this.sex + "|" + this.age + "|"
        + this.height + "|"; 
  } 
  
  public String name; 
  public String sex; 
  public int age; 
  public int height; 
} 
  
public class SerialTest { 
  public static void main(String[] args) throws FileNotFoundException, 
      IOException, ClassNotFoundException { 
  
    Person p = new Person("Jim", "male", 28, 194); 
  
    // 开始序列化 
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( 
        new File("myTest.txt"))); 
    oos.writeObject(p); 
  
    // 反序列化 
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream( 
        new File("myTest.txt"))); 
    Person p1 = (Person) ois.readObject(); 
  
    System.out.println(p1.toString()); 
  } 
}

(2)XML反序列化成class:

import java.io.*; 
import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.io.xml.DomDriver; 
  
  
@SuppressWarnings("serial") 
class RoadInfo implements Serializable { 
  
  public int id; 
  public long MDN; 
  public String NAME; 
  public double LNG; 
  public double LAT; 
  public String ICON; 
  
} 
  
@SuppressWarnings("serial") 
class table_list implements Serializable { 
  
  public String toString() { 
    StringBuffer sb = new StringBuffer(); 
    for (RoadInfo r : sequence) { 
      sb.append("|"); 
      sb.append(r.id); 
      sb.append("|"); 
      sb.append(r.MDN); 
      sb.append("|"); 
      sb.append(r.NAME); 
      sb.append("|"); 
      sb.append(r.LNG); 
      sb.append("|"); 
      sb.append(r.LAT); 
      sb.append("|"); 
      sb.append(r.ICON); 
      sb.append("|\n"); 
    } 
    return sb.toString(); 
  } 
  
  public table_list(int count) { 
    sequence = new RoadInfo[count]; 
    for (int i = 0; i < count; i++) { 
      sequence[i] = new RoadInfo(); 
    } 
  } 
  
  public RoadInfo[] sequence; 
} 
  
public class XMLTest { 
  
  /** 
   * @param args 
   */
  public static void main(String[] args) throws Exception { 
    // TODO Auto-generated method stub 
    StringBuffer sb = new StringBuffer(); 
    BufferedReader reader = new BufferedReader(new FileReader(new File( 
        "friend_msg.xml"))); 
    while (true) { 
      String s = reader.readLine();// 读一行 
      if (s == null) { 
        break; 
      } 
      sb.append(s); 
    } 
  
    XStream xs = new XStream(new DomDriver()); 
    table_list db = (table_list) xs.fromXML(sb.toString()); 
    System.out.println(db.toString()); 
  
  } 
}

以上就是Java實現序列化與反序列化的簡單範例的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn