详解Java对象序列化与反序列化

概念

序列化:把对象转换为字节序列的过程称为对象的序列化,也就是把一个结构化数据(对象)变成一个二进制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

猜你喜欢

转载自blog.csdn.net/char_m/article/details/106884592