JAVA序列化

1、什么是序列化

序列化就是把对象转换成字节方便存储以及传递,并且可以在从字节重构对象的一种机制。

2、序列化的作用:

分布式处理中对象的传递。负载均衡以及故障转移

3、serializable接口:

java 中一个对象要声明为可序列化的对象,只要继承Serializable接口就可以了。Serializable接口不含有任何方法。

一个对象被序列化,则其中的所有实例变量要么是基本类型,要么是可序列化的。而对于不可序列化或者我们不想序列化的变量可以用transient声明。

4、一个序列化例子

public class Employee implements Serializable{
        private String name;
        private double salary;
}

ObjectOutputStream out = new ObjectOutputStream(Files.newOutputStream(Path));

Employee peter = new Employee("peter",90000);
out.writeObject(peter)

反序列化

ObjectInputSteam in = new ObjectInputSteam(Files.newInputSteam(Path));

Employee peter = (Employee)in.readObject();


这里有一点需要注意当两个对象引用了同一个对象的时候,当要读回这两个对象的时候他们也要引用的是同一个对象。

要做到这一点,我们需要有一个序列化号,假设A,B同时引用了C,那么序列化A的时候C也被序列化了,序列化B的时候我们检查发现C已经被序列化了。那这时候只在B中保存一个序列化号

5、readObject和writeObject方法

由于某些特殊需求我们可以重写这两个方法。我们可以在默认的读写行为上加上任意的操作。

比如Point2D这个类是不可序列化的

public class LabeledPoint implements Serializable{
          private String label;
          private transient Point2D point;
...
}

private void writeObject(ObjectOutputStream out){
           out.defaultWriteObject();
           out.writeDouble(point.getX());
           out.writeDouble(point.getY());
}
<pre name="code" class="java">private void readObject(ObjectInputSteam in){
           in.defaultReadObject();
           double x = in.readDouble();
           double y = in.readDouble();
           point = new Point2D(x,y);
}


 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值