概念
序列化:把对象转换为字节序列的过程称为对象的序列化,也就是把一个结构化数据(对象)变成一个二进制bit流(可以把这个bit流保存到文件或者数据传输)。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化,把二进制bit流还原回原来的对象
目的
为了让对象通过网络传输能够在文件中保存
在序列化和反序列化的过程中要保证“信息不丢失”,如果丢失就不能还原出一模一样的对象。
类似游戏的存档/读档
实现方式
一定要牢记实现序列化本身是跟语言无关的
0、Java对象序列化
1、JSON序列化
2、XML
3、Protostuff
4、Hession(它基于HTTP协议传输,使用Hessian二进制序列化,对于数据包比较大的情况比较 友好。)
5、Dubbo Serialization(阿里dubbo序列化)
6、FST(高性能、序列化速度大概是JDK的4-10倍,大小是JDK大小的1/3左右)
7、自定义协议进行序列化
自定义序列化,在类中定义的属性,可以把每个属性中的unicode码取出来,进一步转换成二进制的比特流,就完成序列化了
Java对象序列化
借助流对象完成
序列化
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Student implements Serializable {
public String name;
public int age;
public int score;
}
class IODemo {
public static void main(String[] args) throws IOException {
Student s = new Student();
s.name = "张三";
s.age = 20;
s.score = 100;
serializeStudent(s);
}
private static void serializeStudent(Student s) throws IOException {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\test_dir\\student,txt"));
//writeObject集序列化和写文件同时进行
objectOutputStream.writeObject(s);
objectOutputStream.close();
}
}
序列化
import java.io.*;
public class Student implements Serializable {
public String name;
public int age;
public int score;
}
class IODemo {
IODemo() throws IOException {
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
/* Student s = new Student();
s.name = "张三";
s.age = 20;
s.score = 100;
serializeStudent(s);*/
Student s = deserializeStudent();
System.out.println(s.name);
System.out.println(s.age);
System.out.println(s.score);
}
private static Student deserializeStudent() throws IOException, ClassNotFoundException {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D:\\test_dir\\student,txt" ));
Student student = (Student) objectInputStream.readObject();
return student;
}
}
张三
20
100