1. 程式人生 > >Java序列化與反序列化講解

Java序列化與反序列化講解

1、什麼是Java序列化和反序列化?

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

2、為什麼要使用序列化和反序列化?

     當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個Java物件轉換為位元組序列,才能在網路上傳送;接收方則需要把位元組序列再恢復為Java物件。

3.如何實現Java序列化與反序列化

ObjectOutputStream:表示物件輸出流

ObjectInputStream:表示物件輸入流


4.舉例說明

//只有實現了Serializable或Externalizable介面的類的物件才能被序列化,否則丟擲異常。

package com.mytest.main;

import java.io.Serializable;

public class Student implements Serializable{
	/**
	 * 不想將某屬性序列化的話,可以用transient修飾 
	 * 如下:private transient String as;
	 */
		
	
	private String name;
	private int age;
	
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
	

}

//序列化方法

private static void setSerializable() {
		Student student=new Student("落雨敏", 20);
		
		try {
		      File file=new File("E:/Test/user.txt");
		    	 if(!file.exists()){
		    	    file.createNewFile();
		    	 }
		    //序列化過程
		    FileOutputStream os=new FileOutputStream(file);
		    ObjectOutputStream oos=new ObjectOutputStream(os);
		                    oos.writeObject(student);
		                    oos.flush();
		                    oos.close();
		                    os.close();
		                    
				System.out.println("序列號成功");
			} 
		catch (IOException e) {
           e.printStackTrace();
		  }
		
	}
 //反序列化方法
	private static void getSerializable() {
	
		try {
			File file=new File("E:/Test/user.txt");
			   if(!file.exists()){
				     System.out.println("沒有發現檔案");
				     return ;
			   }
                         //反序列化過程
			FileInputStream is=new FileInputStream(file);
			ObjectInputStream ois=new ObjectInputStream(is);
			       Student  student=(Student) ois.readObject();
			             ois.close();
			             is.close();
			      System.out.println("反序列:"+student);
			             
		   }	
			
		  catch (IOException | ClassNotFoundException e) {
				e.printStackTrace();
		  }			

	    
	}