Java对象序列化

来源:互联网 发布:风电 知乎 编辑:程序博客网 时间:2024/05/21 07:04

         在Java中,序列化是指将一个对象或一组有关联的对象打平成适合于磁盘存储或消息传送的串行格式,解序列化是指从串行格式中恢复对象或一组对象的状态。它假设进行解序列化的进程事先不知道序列化格式中的类型。因此,要将关于每个对象类的一些信息包含在序列化格式中,这些信息使得接收方在解序列化对象时能装载恰当的类。

         类的信息由类名和版本号组成。当类有大的改动时要修改版本号。它可由程序员设置或自动根据类名和它的实例变量、方法和接口的名字的散列值计算,解序列化对象的进程能检查它的类版本是否正确。

         Java对象可以包含对其他对象的引用。当序列化时,它引用的所有对象也随它一起序列化,以确保对象在目的地重构时它引用的对象也能恢复。引用被序列化成句柄----在这种情况下,句柄是在序列化格式内对一个对象的引用。序列化过程必须确保对象引用和句柄之间一一对应。它也必须确保每个对象只能写一次---在对象第二次出现及之后再出现时,写入句柄而不是对象。

         为了序列化一个对象,要写出它的类信息,随后是实例变量的类型和名字;如果实例变量属于新的类,那么写出他们所属的新类的类信息,随后是新类的实例变量的类型和名字。这个递归过程一直进行到所有必须的类的类信息和实例变量的类型和名字都被写出为止。每个类都有一个句柄,没有一个类会多次写入字节流----在需要的地方会写入句柄。

         整型、字符型、布尔、字节、和长整型这样的简单类型的实例变量的内容可以用ObjectOutputStream类的方法写成一个可移植的二进制格式。字符串和字符使用writeUTF方法写入,该方法使用通用传输方式(UTF-8),UTF依旧用一个字节标识ASCII字符,而用多个字节表示Unicode字符。字符串的前面是串占据的字节数.

0 0
原创粉丝点击