现在的位置: 首页 > 综合 > 正文

Java对象序列化和反序列化

2018年05月14日 ⁄ 综合 ⁄ 共 987字 ⁄ 字号 评论关闭
1、什么是对象序列化和反序列化?
序列化是一种处理对象流的机制,所谓对象流也就是将对象的内容进行流化。
对象序列化和对象反序列化,就是将对象写入字节流和从字节流中读取对象的过程。
 
2.实现序列化的方法?
Serializable,不用实现任何方法
Exrernalizable,需要实现writeExternal和readExternal
 
3.如何实现对象在磁盘中的存取操作?
1)将数据分解为字节流,以便存储在文件中或在网络中传输。java.io.ObjectOutputStream中的writerObject(Object obj)
2)反序列化就是打开字节流并重构对象。java.io.ObjectInputStream中的readObject(Object obj)
 
4.使用ObjectInputStream读取对象时为什么会发生StreamCorruptedException?
StreamCorruptedException是流中控制信息不一致异常,当从对象流读取的控制信息与内部一致性检查相冲突,就会抛出。

例如,2个ObjectOutputStream对象写入,1个ObjectInputStream。(ObjectOutputstream构造函数会在输出流写入一个标识头,需要与ObjectInputStream对应)
 
5.成员变量中,哪些需要序列化?
需要序列化:属性,类名;
不需要序列化:方法,static,transient修饰的属性;(读取时为系统默认初始值)
 
6.如何自定义序列化和反序列化?
加密的时候,可以考虑自定义序列化和反序列化
 
7.在序列化中添加serivalVersionUID属性有什么作用?

    没有显示定义,java序列化机制就会格局编译的class我自动生成一个serialVersionUID,只有同义词编译生成的class才会有相同的serialVersionUID。
    如果不希望通过编译来强制划分软件版本,既实现序列化接口的类能够兼容以前版本,只需显示定义private staticfinal  Long serialVersionUID = 1L,即可保证相同版本号,且在进行序列化和放序列化时不会出现InvalidClassEcxeption异常。
 

抱歉!评论已关闭.