序列化與反序列化是指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)!