之前不理解的序列化和反序列化看了之后秒懂!

如何让一个类在网络里面传输

序列化是什么?

序列化是要和io流在一起联系的,他的出现就是解决了类可以在网络里面传输。
重点:序列化就是保存数据的时候,要保存数据的值和数据的类型
例如:int i = 10; 你要保存的就是 10 和 int 这两个东西。

反序列化是什么?

重点:反序列化,就是你保存的数据的时候取出来的时候,是取他的值和数据类型的。
例如:你保存了一个Dog东西,取的时候他也要是一个Dog东西。

类要可以被序列化是有条件的

你的这个类必须实现两个接口
Serializable:一般是推荐使用这个接口的,他就是一个标记性的接口
Exetrnlizable:这个接口要现实他的方法,不推荐。

Java提供两个包装流/节点流针对于序列化的操作

ObjectOutputStream 序列化,从内存里面写对象到磁盘里面

public class Dome {
    public static void main(String[] args) throws IOException {
        //这里ObjectOutputStream 是包装流里面要存放一个节点流的
        ObjectOutput objectOutput = new ObjectOutputStream(new FileOutputStream("D://a.bat"));
        //这里写的时候,这个100会自动装箱
        objectOutput.writeInt(100);
        //这个是序列化一个对象
        objectOutput.writeObject(new Dog("小黄"));
        //记得关闭流
        objectOutput.close();
    }
}
class Dog implements Serializable{
    String name;

    public Dog(String name) {
        this.name = name;
    }
}

ObjectInputStream 反序列化,从磁盘里面的文件读取到内存

public class Dome2 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D://a.bat"));
        //重点反序列化读取的数据必须和你写入序列化数据一致
        int i = objectInputStream.readInt();
        Object o = objectInputStream.readObject();
        System.out.println(i);
        System.out.println(o);
        objectInputStream.close();
    }
}

序列化细节

1,读写顺序一致。
2,类必须要实现序列化接口。
3,类里面可以添加SerialVersionUID = 1L;属性提高版本的兼容性例如:你在序列化的类里面添加了一个属性,他就不会认为这个类是新的类,他会理解成为这个类在弄版本的变更。
4,序列化的时候,默认全部属性都序列化的除了static,transient修饰的属性。
5,实例化类的属性必须实现序列化的接口,如果父类实现了序列化接口,子类会自动继承过来的。

#Java学习#
全部评论
最后这几点总结的非常简单明了
点赞 回复 分享
发布于 2022-08-26 20:40 陕西

相关推荐

点赞 评论 收藏
分享
11-15 17:19
湖南大学 Java
成果成果成果果:这是哪个公司的hr,这么离谱吗,我没见过用性别卡技术岗的,身边女性同学拿大厂offer的比比皆是
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务