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

	    
	}




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