序列化&反序列化

版权声明:转载请写明出处 https://blog.csdn.net/huijiangu4621/article/details/83474232

序列化
把对象转化为字节序列的过程称之为对象的序列化
反序列化
序列化反之为反序列化

小知识点
serialVersionUID
当我们制定了serialVersionUID后,相当于为它录入了一个指纹,下次我们再反序列化的时候就可以轻松找到它,哪怕它发生了改动,也没有关系,因为指纹是唯一的。但当我们没有指定serialVersionUID的时候,java编译器会自动给这个class一个摘要算法,当文件一旦有改动,为了保证编号唯一UID就会不同,因此当再反序列化的时候就会出现两个序列化版本号不一致的错误

java.io.InvalidClassException: com.etoak.crazy.study.serialization.demo.SerializeUserEntity; local class incompatible: 
stream classdesc serialVersionUID = -4352046751782505246, local class serialVersionUID = 3617424993278848111

Transient关键字
被transient关键字修饰的属性不参与序列化

DEMO

创建实体类,密码被transient修饰

package com.etoak.crazy.study.serialization.demo;

import java.io.Serializable;

public class SerializeUserEntity implements Serializable{

	private static final long serialVersionUID = -4352046751782505246L;
	
	private String id;
	private String userName;
	private transient String userPassword;
	
	
	public SerializeUserEntity() {
		super();
	}
	
	
	public SerializeUserEntity(String id, String userName, String userPassword) {
		super();
		this.id = id;
		this.userName = userName;
		this.userPassword = userPassword;
	}

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}


	@Override
	public String toString() {
		return "SerializeUserEntity [id=" + id + ", userName=" + userName + ", userPassword=" + userPassword + "]";
	}
	
	
}

主方法

package com.etoak.crazy.study.serialization.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.UUID;

public class SerializeDemo {
	
	public static void main(String[] args) {
		
		//序列化
		SerializeUser();
		//反序列化
		Deserialization();
	}
	
	public static void SerializeUser() {
		try {
			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("user")));
			SerializeUserEntity user =  new SerializeUserEntity(UUID.randomUUID().toString(),"TEST","123456");
			System.out.println("序列化:"+user);
			out.writeObject(user);
			out.flush();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void Deserialization() {
		try {
			ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("user")));			
			SerializeUserEntity user2 = (SerializeUserEntity)in.readObject();
			System.out.println("反序列化:"+user2);
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/huijiangu4621/article/details/83474232