103 System.out.println("name = " + name1 + ",st1 = " + st1);
104 }catch(Exception e){
105 e.printStackTrace();
106 }
107 System.out.println("===================================");
108 /**
109 * 用字节流的方式实现序列化
110 */
111 try{
112 ByteArrayOutputStream bout = new ByteArrayOutputStream();
113 ObjectOutputStream out = new ObjectOutputStream(bout);
114 out.writeObject("st");
115 out.writeObject(st);
116 out.flush();
117 ObjectInputStream in = new ObjectInputStream(
118 new ByteArrayInputStream(bout.toByteArray()));
119 String name1 = (String)in.readObject();
120 SerializableTest st1 = (SerializableTest)in.readObject();
121 System.out.println("name = " + name1 + ",st = " + st1);
122 }catch(Exception e){
123 e.printStackTrace();
124 }
125 /**
126 * 获得的结果都是一样的,说明档对象序列化之后,可以通过文件或者字节流再次得到对象的状态信息
127 * 因为此对象的Data数组是用随机数创建的,结果相同说明没有调用对象的构建器,连默认构建器都不会调用
128 */
129 }
130 }
2.关于序列化后的对象所处的文件位置
看例子:
Alien.java
此类不做任何事情,只用于实现序列化接口,可以被保存入IO流
show sourceview sourceprint 01 package froest.serializable.find;
02
03 import java.io.Serializable;
04
05 public class Alien implements Serializable {
06 /**
07 * 序列化搜索类
08 *
09 * 若果这个文件在froest.serializable.xfile下面,把Alien.java,FreezeAlien.java,ThawAlien.java都编译一下
10 * 运行可以运行的
11 * 但是把Alien.java移动到froest.serializable.find目录下面
12 * FreezeAlien.java不编译,直接运行ThawAlien.java
13 * 发现抛出异常ClassNotFoundException:froest.serializable.xfiles.Alien,发生在in.readObject()处
14 * 但是Alien.class已经存在在bin.froest.serializable.find目录下面,所以问题不是出在Alien.class上面,而是在files上面
15 * files文件是Alien.java在froest.serializable.xfile下面编译产生的,所以files中的对象所在的位置是在froest.serializable.xfile中,
16 * 而现在froest.serializable.xfile包中并不能找到Alien.class文件,所以报ClassNotFoundException
17 */
18 }
FreezeAlien.java
show sourceview sourceprint 01 package froest.serializable.find;
02
03 import java.io.FileOutputStream;
04 import java.io.ObjectOutputStream;
05
06 public class FreezeAlien {
07
08 /**
09 * @param args
10 */
11 public static void main(String[] args) throws Exception {
12 // TODO Auto-generated method stub
13 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("files"));
14 Alien alien = new Alien();
15 out.writeObject(alien);
16 //out.close();
17 }
18 }
ThawAlien.java
show sourceview sourceprint 01 package froest.serializable.xfiles;
02
03 import java.io.FileInputStream;
04 import java.io.ObjectInputStream;
05 import froest.serializable.find.Alien;
06
07 public class ThawAlien {
08
09 /**
10 * @param args
11 */
12 public static void main(String[] args) throws Exception{
13 // TODO Auto-generated method stub
14 ObjectInputStream in = new ObjectInputStream(new FileInputSt