java 序列化对象 内存_java对象序列化,反序列化

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反序列 运行结果:

4、总结

github 代码地址:caov/Blog

由于本人知识水平有限,文章中倘若有错误的地方 ,欢迎留言

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值