版权声明:转载请写明出处 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();
}
}
}
结果