Java基础知识总结-序列化

1. 什么是反序列化?

    反序列化是指从序列化状态重新构建对象的过程,是序列化的反操作。

2. Serializable接口与Externalizable接口的区别?

    Serializable是一个标识接口,而Externalizable是一个非标识接口。当用Serializable接口时,实现类会自动序列化,但可以通过重写writeObject()方法和readObject()方法来实现更多复杂的对象序列化过程。

    当用Externalizable接口时,你会对序列化过程有一个完全的控制。

3. 什么是Externalizable接口?

    Externaizable接口用于将对象状态转换为压缩格式的字节流,它不是一个标识接口。

4. Serializable接口有多少方法?如果没有,Serializable接口的目的是什么?

    Serializable接口存在于java.io包中,是序列化机制的核心。Serializable接口没有方法,是一个标识接口。当一个类实现Serializable接口,那么这个类就可以序列化了,编译器通过这个Serializable接口标识,告诉Java序列化机制序列化这个类的对象。

5. 什么是序列化?

    Serializable是一个标识接口,当一个对象通过网络传输(比如rmi或ejb),或者保存一个对象状态为文件,这个对象的类就需要实现Serializable接口。实现了Serializable接口,这个类的对象就可以转换为字节流,通过网络传输。

6. 除了Serializable接口,还有什么方法可以实现对象序列化?

    除了Serializable接口,至少还有三种方法可以实现Java对象序列化。

    对于对象序列化,开发者可以实现Externalizable接口(扩展自Serializable接口)。实现Externalizable接口,开发者需要实现writeExternal()方法和readExternal()方法,因此这种方法对序列化对象有更多的读写控制。

    XML序列化是一种常用的数据交换方法。这种方法相比Java序列化,无论对象大小还是处理时间,都有较差性能。用一个比较快的XML解析器,可能会减少处理时间差距。无论怎么说,XML序列化对于序列化对象的改变,提供了一种更有扩展性的解决方法

    最后考虑一个自己定制的序列化方法,你自己将对象内容写成ObjectOutputStream或DataOutputStream。因这种方法更接近序列化的底层实现,它提供最大的灵活性和扩展性,而且性能比Java序列化还要好。

7. 什么是transient变量?在序列化过程起什么作用?

    transient关键字用于标识一个属性不需要序列化,当反序列化的时候,transient变量仍然是默认值。把不需要序列化的属性设置为transient,可以提高序列化的性能。

class MyVideo implements Serializable {
    private Video video;
    private transient Image thumbnailVideo;

    private void generateThumbnail() {
        // generate thumbnail.
    }
    
    private void readObject(ObjectInputStream inputStream) throws IOException, ClassNotFoundException {
        inputStream.readObject();
        generateThumbnail();
    }
}
8. 序列化的作用是什么?

    序列化被用于:

    通过网络传输一个或多个对象的状态;

    保存对象状态到一个文件中;

    一个对象的状态需要作为字节流操作时。

9. 静态变量会被序列化吗?

    不。静态变量属于类而不属于一个对象,静态变量不是对象状态的一部分,因此静态变量不做为序列化对象的一部分而被序列化。

10. 为什么序列化不保存静态类属性?为什么不序列化静态变量?

    静态变量不属于对象状态的一部分,它们被同一个类的所有对象共享。保存静态变量序列化会有如下问题:

    同一个对象会有多个不同的副本,影响效率;

    静态变量可以被任何对象修改,因此一个序列化副本可能与当前静态变量值不同步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值