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
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

csqqer
搜索本博客
博客分类
最近加入圈子
最新评论