`
xiefeifeihu
  • 浏览: 99315 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

序列化:Serializable和Externalizable

 
阅读更多

 

Externalizable是深度定制序列化。如果同时实现了这两个接口,则只会执行Externalizable。

 

Serializable可以仅仅标记可序列化,使用JDK默认的序列化方法,也可以定制。实现方法:

    private void writeObject(ObjectOutputStream oos) {
//        oos.defaultWriteObject();
        // Write/save additional fields
        oos.writeUTF(value);
    }


    private void readObject(ObjectInputStream ois) {
//        ois.defaultReadObject();
        // Read/initialize additional fields
        value = ois.readUTF()
    }

Externalizable必须实现方法:

 

    void writeExternal(ObjectOutput out) {
        out.writeUTF(value)
    }

    void readExternal(ObjectInput input) {
        value = input.readUTF()
    }

 

如果实现是深度定制序列化,但是用Serializable的writeObject方法实现,它不一定起作用。

 

注意几点:

1、静态static成员不被序列化

2、如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException

3、transient修饰的字段不被序列化

4、父类如果不可序列化,子类不会序列化父类的成员,除非在子类中显式序列化。父类可序列化,子类也需要调用super的序列化方法。

 

分享到:
评论

相关推荐

    Java 串行化(序列化)Serializable/Externalizable

    2. **自定义序列化**:通过实现Externalizable接口,自定义序列化和反序列化逻辑,适合需要优化性能或有特殊需求的场景。 3. **序列化过滤**:使用`transient`关键字忽略不想序列化的字段,或使用`@serialData`注解...

    深入剖析Java序列化:挑战复杂的面试题与详细解析

    - 实现`Serializable`接口,并可选择重写`writeObject()`和`readObject()`方法来自定义序列化和反序列化逻辑。 5. **处理循环引用**: - 使用`transient`关键字标记循环引用的成员变量,或者通过重写序列化方法来...

    Java序列化(Serializable)与反序列化__1.docx

    `Externalizable`接口允许对象完全控制序列化过程,而仅实现`Serializable`接口的类则采用默认的序列化方式。对于那些不希望被序列化的类或字段,可以使用`transient`或`volatile`关键字标记,它们会被忽略在序列化...

    详解Java 序列化与反序列化(Serialization)

    通过这两个类,我们可以看到如何使用 Serializable 和 Externalizable 接口来实现序列化和反序列化。 序列化和反序列化的应用场景非常广泛,例如在分布式系统中,需要将对象的状态信息从一台机器传输到另一台机器上...

    Java序列化(Serializable)与反序列化_.docx

    2. **实现Externalizable接口**:这个接口继承自`Serializable`,提供了更高级别的控制,允许开发者自己编写序列化逻辑。 3. **序列化兼容性**:`serialVersionUID`的作用在于保证版本兼容性。开发者可以通过显式...

    java序列化和反序列化的方法

    * 使用 Externalizable 接口实现序列化和反序列化 * 使用 Java 序列化 API 实现序列化和反序列化 在实际开发中,选择合适的序列化和反序列化方法取决于具体的需求和场景。在本例中,我们使用 Serializable 接口实现...

    java.io.Serializable序列化问题

    ### Java.io.Serializable 序列化...通过实现 `Serializable` 接口或 `Externalizable` 接口,可以轻松地实现序列化和反序列化功能。需要注意的是,在实际应用中还需要考虑序列化的效率、安全性以及版本兼容性等问题。

    java序列化对象的存储和读取共6页.pdf.zip

    - `Externalizable`接口提供了一种自定义序列化和反序列化方式,但需要手动编写序列化逻辑。 8. **`ObjectInputStream`和`ObjectOutputStream`的其他方法:** - `defaultWriteObject()`用于写入默认的流式序列化...

    探索Java序列化与反序列化的奥秘:数据持久化的桥梁

    2. **实现Externalizable接口**:如果需要更多控制权,可以选择实现`Externalizable`接口,该接口要求实现`writeExternal()`和`readExternal()`方法,从而可以自定义序列化和反序列化的逻辑。 #### 示例代码:序列...

    Java中的序列化与反序列化.pdf

    总结来说,Java中的序列化和反序列化是通过`Serializable`接口和`Externalizable`接口来实现的。`Serializable`接口是默认的序列化方式,适用于大多数简单情况;而`Externalizable`接口则提供了自定义序列化行为的...

    java序列化与反序列化

    序列化也可能带来安全风险,因为任何实现了Serializable接口的对象都可以被序列化,然后在不受信任的环境中反序列化。这种攻击称为“反序列化漏洞”,可能导致代码执行。因此,谨慎处理反序列化的对象,避免来自不可...

    xml的序列化与验证

    1)Serializable和Externalizable接口Xstream框架2)Simple框架 3)Apache的AXIOM框架 2、XML验证文档的生成工具 trang.jar 3、利用XSD文件的XML3种验证方法 1)Dom4j的SAXValidator (dom4j.jar, javax.xml....

    深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)

    今天,我们将深入理解Java虚拟机-Java内存区域透彻分析,探讨序列化和反序列化的概念及其使用场景,实现序列化的方式,以及transient关键字的作用。 序列化和反序列化的概念 序列化是指将Java对象转换为二进制数据...

    java对象序列化.ppt

    通过实现`Serializable`或`Externalizable`接口,我们可以控制对象如何被序列化和反序列化,同时`transient`关键字提供了保护敏感数据的手段。理解和熟练运用这些概念对于Java开发者来说非常重要,特别是在处理持久...

    JAVA对象的序列化与反序列化详细PPT课件.pptx

    另外,还有`java.io.Externalizable`接口,它继承自`Serializable`,但提供了更细粒度的控制权,允许类自定义序列化和反序列化的行为。如果一个类实现了`Externalizable`,则需要手动实现`writeExternal...

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    `Serializable`接口是标识对象是否可序列化的标志,`Externalizable`接口允许更精细的控制序列化过程。 5.3 实施过程: 5.3.1 序列化:通过实现`Serializable`接口,然后使用`ObjectOutputStream`的`writeObject()`...

Global site tag (gtag.js) - Google Analytics