java序列化(一)

2014-11-24 03:07:53 · 作者: · 浏览: 0

在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();

10