java序列化(二)

2014-11-24 03:07:53 · 作者: · 浏览: 8
2 SerializableTest st1 = (SerializableTest)in.readObject();

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