java 串行化必须实现接口_java类为什么要实现Serializable接口

在开发过程中,看到java类不管是vo,dto,还是po类都需要实现java.io.Serializable 这个没有属性和方法的空接口(public interface Serializable {})。vo类实现如public class SemesterVo implements Serializable {代码...}。

此时个人也是百思不得其解,因为既然是空接口,还有什么好实现的。

经过研究才知道。我们要明白:

1.什么是Serializable接口?

一个对象序列化的接口。一个类只有实现了Serializable接口,它的对象才能被序列化。

2.什么是序列化?

将对象的状态信息转换为可以存储或传输的形式的过程。

程序的运行机制是:程序在运行时实例化出对象,这些对象存在于内存中,随着程序运行停止而消失(也就是匿名对象将会被垃圾回收器回收掉,这是堆内存的知识,对象存储在堆内存中),但如果我们想把某些对象(一般都是各不相同的属性)保存下来或者传输给其他进程,在程序终止运行后这些对象仍然存在,可以在程序再次运行时读取这些对象的信息,或者在其他程序中利用这些保存下来的对象信息恢复成实例对象。这种情况下就要用到对象的序列化和反序列化。

在序列化期间,对象将其当前状态写入到临时存储区或持久性存储区,之后,便可以通过从存储区中读取或反序列化对象的状态信息,来重新创建该对象。

实现Serializable和不实现该接口的区别就是:

想要序列化某些类的对象,这些类就必须实现Serializable接口。

Serializable这个空接口作用:目的只是简单的标识一个类的对象可以被序列化。

那么什么情况下才需要实例化该接口呢?a)当你想把的内存中的对象写入到硬盘的时候;

b)当你想用套接字在网络上传送对象的时候(另一个说法就是当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化。);

c)当你想通过RMI传输对象的时候;

分别解释下这三个场景下的使用:

a)比如说你的内存不够用了,那计算机就要将内存里面的一部分对象暂时的保存到硬盘中,等到要用的时候再读入到内存中,硬盘的那部分存储空间就是所谓的虚拟内存。在比如过你要将某个特定的对象保存到文件中,我隔几天在把它拿出来用,那么这时候就要实现Serializable接口;

b)在进行java的Socket编程的时候,你有时候可能要传输某一类的对象,那么也就要实现Serializable接口;最常见的你传输一个字符串,它是JDK里面的类,也实现了Serializable接口,所以可以在网络上传输。

c)如果要通过远程的方法调用(RMI)去调用一个远程对象的方法,如在计算机A中调用另一台计算机B的对象的方法,那么你需要通过JNDI服务获取计算机B目标对象的引用,将对象从B传送到A,就需要实现序列化接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值