【java基础】Java序列化和反序列化(详解)

1.概念

Java序列化就是指把Java对象转换为字节序列的过程。将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。

Java反序列化就是指把字节序列恢复为Java对象的过程。将保存在磁盘文件中的java字节码重新转换成java对象称为反序列化。

2.具体实现

(1)编写Cat.java类,并实现了serializable接口(必须的)

import java.io.Serializable;

public class Cat implements Serializable {
    private String name;
    private Integer age;
    private String type;


    public String getName(String romcat) {
        return name;
    }

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

    public Integer getAge(int i) {
        return age;
    }

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

    public String getType(String test) {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", type='" + type + '\'' +
                '}';
    }
}

(2)序列化

import java.io.*;

//java中专门提供对象流 进行对象的读写操作
//内存和硬盘之间可以传输的只有字节和字符串
public class Test {
    public static void main(String[] args) {

        File file = new File("d:\\test\\cat.txt");
        ObjectOutputStream oos = null;
        Cat cat = new Cat();
        cat.setType("加菲猫");
        cat.setName("tomcat");
        cat.getAge(3);
        try {
            oos = new ObjectOutputStream(new FileOutputStream(file));
            oos.writeObject(cat);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

(3)反序列化

虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(就是 private static final long serialVersionUID = 1L)

import java.io.*;

//java中专门提供对象流 进行对象的读写操作
//内存和硬盘之间可以传输的只有字节和字符串
public class Test {
    public static void main(String[] args) {

        File file = new File("d:\\test\\cat.txt");
        ObjectInputStream ois = null;
        Cat cat = new Cat();
        try {
            ois = new ObjectInputStream(new FileIutputStream(file));
            Object o=oos.readObject();
            System.out.println(o.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

(4)transient关键字

transient修饰的成员变量不会被序列化。

注意static修饰的静态变量天然就是不可序列化的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值