当前位置:编程学习 > JAVA >>

java序列化

在JDK或者其他地方,相信各位读者都经常遇到Serializable这个词,这就是java中的序列化接口,定义在java.IO.*下面。

1.证明Serializable确实可以使对象保存状态信息。

SerializabeTest.java

show sourceview sourceprint?001 package froest.serializable; 

002   

003 import java.io.ByteArrayInputStream; 

004 import java.io.ByteArrayOutputStream; 

005 import java.io.FileInputStream; 

006 import java.io.FileOutputStream; 

007 import java.io.ObjectInputStream; 

008 import java.io.ObjectOutputStream; 

009 import java.io.Serializable; 

010   

011 class Data implements Serializable{ 

012     /** 

013      *  

014      */

015     private static final long serialVersionUID = 2018026507498303285L; 

016     private int i; 

017   

018     Data(int x) { 

019         i = x; 

020     } 

021   

022     public String toString() { 

023         return Integer.toString(i); 

024     } 

025 } 

026   

027 public class SerializableTest implements Serializable { 

028     /** 

029      *  

030      */

031     private static final long serialVersionUID = 1303931195327594338L; 

032   

033     /** 

034      * 产生随机整数 

035      * @return 

036      */

037     private static int r() { 

038         return (int) (Math.random() * 10); 

039     } 

040     /** 

041      * 设置随机数数组,保证每次生成的数都是不相同的 

042      */

043     private Data[] d = { 

044             new Data(r()), 

045             new Data(r()), 

046             new Data(r()) 

047     }; 

048     /** 

049      * 用于连接到下一个SerializableTest 

050      */

051     private SerializableTest next; 

052     private char c; 

053     /** 

054      * 用于设置一个链表,把多个SerializableTest连接起来 

055      * @param i   需要生成i个SerializableTest对象 

056      * @param x   用于表现每个SerializableTest对象的属性的区别 

057      */

058     SerializableTest(int i,char x){ 

059         System.out.println("SerializableTest.Constructor:"+i); 

060         c = x; 

061         if(--i > 0){ 

062             next = new SerializableTest(i,(char)(x+1)); 

063         } 

064     } 

065     SerializableTest(){ 

066         System.out.println("Default constructor"); 

067     } 

068     /** 

069      * 把SerializableTest中的Data数组组织成String字符串,用于打印输出 

070      */

071     public String toString(){ 

072         String s = ":" + c + "("; 

073         for(int i = 0; i < d.length; i++){ 

074             s += d[i].toString(); 

075         } 

076         s += ")"; 

077         if(null != next){ 

078             s += next.toString(); 

079         } 

080         return s; 

081     } 

082     /** 

083      * @param args 

084      */

085     public static void main(String[] args) { 

086         // TODO Auto-generated method stub 

087         SerializableTest st = new SerializableTest(6,'a'); 

088         System.out.println("st = "+ st); 

089         System.out.println("===================================="); 

090         /** 

091          * 用文件的方式实现序列化 

092          */

093         try{ 

094             ObjectOutputStream out = new ObjectOutputStream( 

095                     new FileOutputStream("SerializableTestFile.out")); 

096             out.writeObject("st"); 

097             out.writeObject(st); 

098             out.close(); 

099             ObjectInputStream in = new ObjectInputStream( 

100                     new FileInputStream("SerializableTestFile.out")); 

101             String name1 = (String)in.readObject(); 

102             SerializableTest st1 = (Ser

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,