Java序列化与反序列化

参考博客:飞鹰279 李学凯

什么叫序列化,什么叫反序列化

简单的来说:

  • 序列化:把对象转换为字节序列的过程称为对象的序列化。
  • 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

JAVA序列化与反序列化就是JAVA对象与一串字节流之间的相互转换, 我们在程序中创建的JAVA对象只存在于JVM中, 当程序退出时, 这些对象也就消失了, 而序列化正是为了将这些对象保存起来以仅将来使用,也可以将已经序列化的对象传送给其他JVM来使用,这些序列化的字节流是于JVM无关的, 也就是说一个JVM序列化的对象可以在另一个JVM中反序列化.。

什么时候需要序列化

当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
当你想用套接字在网络上传送对象的时候;
当你想通过RMI传输对象的时候;

如何实现序列化

  • 实现Serializable接口即可。
  • transient 修饰的属性,是不会被序列化的。

举例参考

可以参考下面这个链接:
https://blog.csdn.net/jason_279/article/details/52947093

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java序列化是将Java对象转换为字节序列的过程,以便将其存储在文件中或通过网络传输。反序列化则是将字节序列转换回Java对象的过程。 Java提供了两种序列化机制:Java序列化和外部化(Externalization)序列化。其中Java序列化是自动进行的,而外部化序列化需要手动实现。 Java序列化的实现方式是通过将Java对象转换为字节流,然后将字节流写入文件或通过网络发送。反序列化则是从字节流中读取数据并将其还原为Java对象。 序列化反序列化的步骤如下: 序列化: 1.创建一个对象输出流(ObjectOutputStream)。 2.调用对象输出流的writeObject()方法将Java对象转换为字节流并写入文件或网络。 反序列化: 1.创建一个对象输入流(ObjectInputStream)。 2.从输入流中读取字节流并调用readObject()方法将其转换为Java对象。 需要注意的是,被序列化的对象必须实现Serializable接口,该接口没有任何方法,只是标识该类可以被序列化。 以下是一个Java序列化反序列化的示例代码: ``` import java.io.*; public class SerializationDemo { public static void main(String[] args) { // 序列化对象 try { // 创建一个Student对象 Student s = new Student("张三", 18, "男"); // 创建一个对象输出流 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.ser")); // 将Student对象写入输出流中 oos.writeObject(s); // 关闭输出流 oos.close(); } catch (IOException e) { e.printStackTrace(); } // 反序列化对象 try { // 创建一个对象输入流 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.ser")); // 从输入流中读取Student对象 Student s = (Student) ois.readObject(); // 输出Student对象的属性 System.out.println(s.getName()); System.out.println(s.getAge()); System.out.println(s.getGender()); // 关闭输入流 ois.close(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } // Student类需要实现Serializable接口 class Student implements Serializable { private String name; private int age; private String gender; public Student(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public String getName() { return name; } public int getAge() { return age; } public String getGender() { return gender; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值