六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 91|回复: 0

初试Java对象的序列化

[复制链接]

升级  42.67%

30

主题

30

主题

30

主题

秀才

Rank: 2

积分
114
 楼主| 发表于 2013-2-7 20:17:07 | 显示全部楼层 |阅读模式
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><meta name="GENERATOR" content="OpenOffice.org 2.3  (Linux)"><style type="text/css"><!-- @page { size: 21.59cm 27.94cm; margin: 2cm }P { margin-bottom: 0.21cm }--></style>        当两个Java进程在网络通信时,一个进程可以通过把Java对象转换为字序列,使其在网络上传送,在接收方则需要把字节序列再恢复为Java对象。对象的序列化主要有两种用途
1.把对象的字节序列永久地保存在硬盘,通常存放在一个文件中。
2.在网絽上传送对象的字节序列。


        只有实现了Serializable或Extenalizable接口的类对象才能被序列化。其中Extenalizable接口继承Serializabler接口,实现Extenalizable接口完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以采用默认的序列化方式。
        如果一个类实现Extenalizable接口,则它必须实现readExtenal(ObjectInputin)和writeExtenal(ObjectOutputout)方法,并且在readExtenal中会先调用类的不带参数的构造方法,所以类必须提供一个不带参数的构造方法。而在实现Serializable接口的类中,它不用调用类的任何构造方法。对于实现Serializable的类,可以通过实现privatevoid read/writeObject()来改变默认的序列化方式。
        对于单例类要实现序列化时,为了使反序列化能够得到正确的结果,需要在类增加一个readResole()方法。
        transient显式声明不对它序列化.
        serialVersionUID用来表示可序列化类的不同版本的序列化兼容性。
                  JavaSE中的PreferencesAPI也提供了对象的持久性。Thinkingin java中给出一个简单的例子。
       下面给出一个简单的序列化例子:
            

<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->import java.io.*;
public class Customer implements Serializable {
    
private int age;
    
public Customer(int age ){
        
this.age = age;
    }
    
public String toString(){
        
return "age="+age;
    }
    
public static void main(String[] args)throws Exception{
        Customer custormer 
= new Customer(24);
        System.out.println(
"before Serializable: "+custormer);
        ByteArrayOutputStream buf 
= new ByteArrayOutputStream();
        ObjectOutputStream o 
= new ObjectOutputStream(buf);
        o.writeObject(custormer);

        
byte[] byteArray = buf.toByteArray();
        
        ObjectInputStream in 
= new ObjectInputStream(new ByteArrayInputStream(byteArray));
        custormer 
= (Customer)in.readObject();
        System.out.println(
"After Serializable:"+custormer);
    }
}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表