• 较java.io.Externalizable和java.io.Serializable(转)


    下面是序列化和外部化在代码级的关联方式:

    public interface Serializable {}

    public interface Externalizable extends Serializable {
      void readExternal(ObjectInput in);
      void writeExternal(ObjectOutput out);
    }

    序列化和外部化的主要区别

    外部化和序列化是实现同一目标的两种不同方法。下面让我们分析一下序列化和外部化之间的主要区别。

    通过Serializable接口对对象序列化的支持是内建于核心 API 的,但是java.io.Externalizable的所有实现者必须提供读取和写出的实现。Java 已经具有了对序列化的内建支持,也就是说只要制作自己的类java.io.Serializable,Java 就会试图存储和重组你的对象。如果使用外部化,你就可以选择完全由自己完成读取和写出的工作,Java 对外部化所提供的唯一支持是接口:

    voidreadExternal(ObjectInput in)
    void writeExternal(ObjectOutput out)

    现在如何实现readExternal() 和writeExternal() 就完全看你自己了。

    序列化会自动存储必要的信息,用以反序列化被存储的实例,而外部化则只保存被存储的类的标识。当你通过 java.io.Serializable接口序列化一个对象时,有关类的信息,比如它的属性和这些属性的类型,都与实例数据一起被存储起来。在选择走 Externalizable这条路时,Java 只存储有关每个被存储类型的非常少的信息。

    每个接口的优点和缺点

    Serializable接口

    ·         优点:内建支持

    ·         优点:易于实现

    ·         缺点:占用空间过大

    ·         缺点:由于额外的开销导致速度变比较慢

    Externalizable接口

    ·         优点:开销较少(程序员决定存储什么)

    ·         优点:可能的速度提升

    ·         缺点:虚拟机不提供任何帮助,也就是说所有的工作都落到了开发人员的肩上。

    在两者之间如何选择要根据应用程序的需求来定。Serializable通常是最简单的解决方案,但是它可能会导致出现不可接受的性能问题或空间问题;在出现这些问题的情况下,Externalizable可能是一条可行之路。

    要记住一点,如果一个类是可外部化的(Externalizable),那么Externalizable方法将被用于序列化类的实例,即使这个类型提供了Serializable方法:

    private void writeObject()
    private void readObject()

    Come from http://soft.zdnet.com.cn/software_zone/2009/0204/1332403.shtml
  • 相关阅读:
    [公告]博客园准备建立SharePoint团队
    [公告]新增三款Skin
    又新增三款Skin
    一个不错的计数器
    [公告]新建新手区
    2005年1月16日 IT Pro 俱乐部活动纪实
    [好消息]祝成科技.微软公司.博客园联合打造IT俱乐部
    [公告]SharePoint团队正式成立
    SharePoint文档库存在问题
    [活动]2004年计算机图书评选
  • 原文地址:https://www.cnblogs.com/likwo/p/1767785.html
Copyright © 2020-2023  润新知