fileinputstream自定义类序列化和反序列化_Java I/O - 序列化、反序列化

1、概念

  • 序列化:把对象从内存中,变成可传输(如网络传输)、可存储(如存储到硬盘)为字节序列的过程
  • 反序列化:把字节序列恢复到内存的过程
字节序列:包括该对象的数据,对象的类型信息,存储在对象的数据类型

2、序列化的条件

类的对象序列化需要满足两个条件

  • 该类必须实现 java.io.Serializable 对象。
  • 该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的(通过 transient 关键字声明)。

如果你想知道一个 Java 标准类是否是可序列化的,请查看该类的文档。检验一个类的实例是否能序列化十分简单, 只需要查看该类有没有实现 java.io.Serializable接口。

3、实现序列化

通过 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。
代码包括三个类:User, SerializeDemo, DeserializeDemo 类。

  • User类代码:实体类需要实现Serializable序列化类
public class User implements Serializable{
    private static final long serialVersionUID = 1L;

    private int id;
    private String name;
    private int age;

     //省略get,set方法   
}
  • SerializeDemo序列化类:将序列化后的User对象写到硬盘 E:/user.ser 文件中
public class SerializeDemo {

    public static void main(String[] args) {
        User user = new User();
        user.setId(1);
        user.setName("van");
        user.setAge(18);

        try {
            FileOutputStream fileOut = new FileOutputStream("E:/user.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(user);
            out.close();
            fileOut.close();
            System.out.println("Serialized data is saved in E:/user.ser");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • DeserializeDemo反序列化类:从硬盘E:/user.ser 文件中获取User对象
public class DeserializeDemo {

    public static void main(String[] args) {
        User user = null;

        try {
            FileInputStream fileInputStream = new FileInputStream("E:/user.ser");
            ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
            user = (User) inputStream.readObject();
            inputStream.close();
            fileInputStream.close();

            System.out.println("Deserialize User : ");
            System.out.println("id : " + user.getId());
            System.out.println("name : " + user.getName());
            System.out.println("age : " + user.getAge());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

DeserializeDemo反序列 运行结果:

b18cb0f317b1a874c237885a33c36ff1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值