Java基础(十六)序列化与反序列化概念作用及代码实现

序列化与反序列化

概念:

序列化:把对象以及相关信息转成字节数组,存储到硬盘上(持久化)
反序列化:把字节数转成对应的对象

注意:
1.类实现Serializable产生的对象才能做序列化
2.如果属性被static/transition修饰不会被序列化过去
3.serialVersionUID—序列化版本号
在序列化之前会根据类里的属性和方法来计算出一个版本号,这个版本号会随着对象一起序列化过去,进行反序列化之前会再次根据类里的属性和方法计算出一个新的版本号,根据原来的版本号和新版本号进行比对,如果相等就反序列化成功,如果不相等就反序列化失败(提供private static final long修饰的版本号,Java就不会计算版本号前后用的都是一个指定的版本号)
4.集合对象和映射对象都不能直接进行序列化,只能一次遍历元素对象一一进行序列化

package cn.tedu.buffer;

import java.io.Serializable;
//类实现Serializable--产生的对象才能做序列化
public class Person implements Serializable {
//java自动提供的序列化版本号
private static final long serialVersionUID=-5200286580088662553L;

    //提供版本号--java就不再计算版本号
    //private static final long serialVersionUID=78653251843L;
    //属性
    private String  name;
    private int age;
    //属性会被序列化过去
    //private char gender;

    //transient---强制属性不被序列化过去
    transient double weight;
    //静态属性--不会被序列化过去
    private static String classroom;

    //方法不会被序列化获取
    //public void m(){}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

序列化:把对象以及相关信息转成字节数组,存储到硬盘上(持久化)

package cn.tedu.buffer;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamDemo {
    public static void main(String[] args) throws IOException {
        //创建对象
        //如果路径信息没有盘符---当前工程
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("p.data"));

        //提供对象
        Person p=new Person();
        p.setName("豆豆");
        p.setAge(14);

        //把对象转成字节数组进行序列化
        oos.writeObject(p);

        //关流
        oos.close();
    }
}

反序列化:把字节数转成对应的对象

package cn.tedu.buffer;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectInputStreamDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //创建对象
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("p.data"));

        //读取字节数组转成对应对象---反序列化
        Person p=(Person) ois.readObject();

        //关流
        ois.close();

        //展示信息
        System.out.println(p.getName()+","+p.getAge());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张艳霞zhangyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值