java类什么时候需要实现Serializable接口

1.什么是Serializable接口

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

2.为什么Serializable接口是空的?
    进入Serializable接口中,我们会发现该接口是个空接口,可以理解成标识接口(举手回答问题)。通知JVM帮你序列化这个类,Java提供用来进行高效率的异地共享实例对象的机制,实现这个接口即可。
3.父类实现了Serializable接口,子类还要是实现吗?

不用,子类继承父类的所有功能和属性,所以父类实现接口会重写接口的方法,即实现了该功能,则子类也会继承下来。

4.序列化和反序列化的原理?

分别通过ObjectOutputStream.writeObject()和ObjectInputStream.readObject()来实现的。

5.什么是序列化?

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

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

6.实现Serializable和不实现该接口的区别:
      想要序列化某些类的对象,这些类就必须实现Serializable接口。

什么情况下才需要实例化该接口呢?
a)当你想把的内存中的对象写入到硬盘的时候;
b)当你想用套接字在网络上传送对象的时候(另一个说法就是当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化。);
c)当你想通过RMI传输对象的时候;

分别解释下这三个场景下的使用:
a)比如内存不够用了,那计算机就要将内存里面的一部分对象暂时的保存到硬盘中,等到要用的时候再读入到内存中,硬盘的那部分存储空间就是所谓的虚拟内存。在比如过你要将某个特定的对象保存到文件中,我隔几天在把它拿出来用,那么这时候就要实现Serializable接口;
b)在进行java的Socket编程的时候,你有时候可能要传输某一类的对象,那么也就要实现Serializable接口;最常见的你传输一个字符串,它是JDK里面的类,也实现了Serializable接口,所以可以在网络上传输。
c)如果要通过远程的方法调用(RMI)去调用一个远程对象的方法,如在计算机A中调用另一台计算机B的对象的方法,那么你需要通过JNDI服务获取计算机B目标对象的引用,将对象从B传送到A,就需要实现序列化接口。

例:
需要實現的情況:
(bean 需要持久化存储媒体中,以及需要传输给另一个应用)
RPC调用 需要实现Serializable接口(
一般来说如果你的对象需要网络传输或者持久化 (对象直接转换为字节的形式传输),那么就需要实现Serializable接口。比如远程方法调RPC (Remote Procedure Call) 则接口参数就一定要实现Serializable接口;)

不需的情況:
只是转换为json字符串的形式与网络打交道,就不需要实现Serializable接口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值