如何理解java.io.Serializable接口

java.io.Serializable是一个没有任何待实现方法的接口,此接口在对象序列化的过程中起到了什么作用?或者此接口在java序列化机制中扮演什么角色?

Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。
摘抄于http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html
PS:链接文章有详细的使用示例哟

大白话就是这个接口允许你把内存里你实例化的对象,当做文件保存下来。有什么用呢,举几个栗子
1.游戏存档:把主人公这个实力对象保存成文件,下次打开游戏就可以加载,接着玩啦哇
2.网络通信:一个机器上实例的对象,要传给另一台机器,先保存成文件再传哇


题主改题之后

你是想了解序列化的机理对吧,既然你诚心诚意的发问了,武藏小次郎~~~~~

好吧来看一下使用ObjectOutputStream类持久化一个对象的过程,writeObject0(Object obj, boolean unshared) 函数的源码1170~1185行(JDK 1.7.0_45)

 if (obj instanceof String) {
    writeString((String) obj, unshared);
} else if (cl.isArray()) {
    writeArray(obj, desc, unshared);
} else if (obj instanceof Enum) {
    writeEnum((Enum) obj, desc, unshared);
} else if (obj instanceof Serializable) {
    writeOrdinaryObject(obj, desc, unshared);
} else {
    if (extendedDebugInfo) {
        throw new NotSerializableException(
            cl.getName() + "\n" + debugInfoStack.toString());
    } else {
        throw new NotSerializableException(cl.getName());
    }
}

看到了吧,对象如果是String、是数组、是枚举、是Serializable就相应的函数把对象写成文件否则抛出错误,扮演什么角色呢,就是一个标志而已。

如果仅仅只是让某个类实现Serializable接口,而没有其它任何处理的话,则就是使用默认序列化机制。使用默认机制,在序列化对象时,不仅会序列化当前对象本身,还会对该对象引用的其它对象也进行序列化,同样地,这些其它对象引用的另外对象也将被序列化,以此类推。所以,如果一个对象包含的成员变量是容器类对象,而这些容器所含有的元素也是容器类对象,那么这个序列化的过程就会较复杂,开销也较大。
依然摘抄与上个链接

Externalizable继承于Serializable,当使用该接口时,序列化的细节需要由程序员去完成。我想你是需要这个~~~

 f
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值