2008-03-06
一个奇怪的Java序列化问题
import java.io.*;
public class Customer implements Serializable {
private int age;
public Customer(int age ){
this.age = age;
}
/* 第一处注释
private void writeObject(ObjectOutputStream os)throws IOException{
os.defaultWriteObject();
System.out.println("write Object");
}
private void readObject(ObjectInputStream is)throws IOException,ClassNotFoundException{
is.defaultReadObject();
System.out.println("readObject ");
}
*/
public String toString(){
return "age="+age;
}
public static void main(String[] args)throws Exception{
Customer custormer = new Customer(24);
System.out.println("before Serializable: "+custormer);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(buf);
o.writeObject(custormer);
byte[] byteArray = buf.toByteArray();
for(int i=0;i<byteArray.length;i++){
System.out.print(byteArray[i]+"");
if((i%10==0 &&i!=0)|| i==byteArray.length-1)System.out.println();
}
//第二处注释
byteArray[byteArray.length-4]=-1;
byteArray[byteArray.length-3]=-1;
byteArray[byteArray.length-2]=-1;
byteArray[byteArray.length-1]=-10;
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteArray));
custormer = (Customer)in.readObject();
System.out.println("After Serializable:"+custormer);
}
}
1.上面的程序能正确运行,但加上第一处注释的内容后,运行时就会抛出Exception in thread "main" java.io.StreamCorruptedException: invalid type code: F6 异常,
2.对于第二处注释修改序列化对象的值有点不明白,为啥如上面的程序所示把最后 的四个字节设成-1 ,-1 -1 ,-10 结果就变成-10????
评论
Scriptlet
2008-04-23
Please set a static sid
qiuyuanshan
2008-04-22
问题1:是不是流冲突了,注释一有个一个默认的io流操作,然后注释二是个新的操作这个对象的流,因为对它进行修改了,所以导致的?把注释二注释掉,注释一放开,也不会报错。。。
问题二:一个int对应四个字节:1111111111111111111111110110
就是-10
问题二:一个int对应四个字节:1111111111111111111111110110
就是-10
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 86 次
- 性别:

- 来自: 成都

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
一个奇怪的Java序列化问题
Please set a static sid
-- by Scriptlet -
一个奇怪的Java序列化问题
问题1:是不是流冲突了,注释一有个一个默认的io流操作,然后注释二是个新的操作这 ...
-- by qiuyuanshan






评论排行榜