序列化的作用
1.数据的持久化。存在磁盘上,以磁信息存储,01-高低电平-电流-电磁转换-磁
2.网络数据传输。
Java原生序列化的局限性
1.只能针对java语言
2.序列化的性能不是很好。
3.没有对序列化后的数据的压缩处理机制。
package com.liming.serializable;
import java.io.Serializable;
public class Student implements Serializable{
String name;
String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student [name=" + name + ", gender=" + gender + "]";
}
}
package com.liming.serializable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.junit.Test;
public class TestDemo {
@Test
public void test01() throws Exception{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("1.txt")));
Student student = new Student();
student.setName("zuo");
student.setGender("woman");
out.writeObject(student);
out.close();
}
@Test
public void test02() throws Exception{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("1.txt")));
Student s = (Student) in.readObject();
System.out.println(s.toString());
}
}
当该变对象结构(此处为给student加一个字段),那么会报错,反序列化不成功。
serialVersionUID,如果序列化和反序列化时id不一致那么会报错。
解决方法自己定义一个serialVersionUID;
package com.liming.serializable;
import java.io.Serializable;
public class Student implements Serializable{
/**
*
*/
private static final long serialVersionUID = -285105176413201102L;
String name;
String gender;
String likes;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student [name=" + name + ", gender=" + gender + "]";
}
}