论坛首页 Java版 OO

一个奇怪的Java序列化问题

浏览 837 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-03-06
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????
   
最后更新时间:2008-04-22
问题1:是不是流冲突了,注释一有个一个默认的io流操作,然后注释二是个新的操作这个对象的流,因为对它进行修改了,所以导致的?把注释二注释掉,注释一放开,也不会报错。。。

问题二:一个int对应四个字节:1111111111111111111111110110

就是-10
   
0 请登录后投票
最后更新时间:2008-04-23
Please set a static sid
   
0 请登录后投票
论坛首页 Java版 OO

跳转论坛:
JavaEye推荐