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 ,