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();
		  }			

	    
	}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章