<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>csqqer</title>
    <description></description>
    <link>http://cser.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>一个奇怪的Java序列化问题</title>
        <author>csqqer</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cser.javaeye.com">csqqer</a>&nbsp;
          链接：<a href="http://cser.javaeye.com/blog/168856" style="color:red;">http://cser.javaeye.com/blog/168856</a>&nbsp;
          发表时间: 2008年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="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&lt;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);
	}
}
</pre><br /><br />1.上面的程序能正确运行，但加上第一处注释的内容后，运行时就会抛出Exception in thread "main" java.io.StreamCorruptedException: invalid type code: F6 异常，<br />2.对于第二处注释修改序列化对象的值有点不明白，为啥如上面的程序所示把最后 的四个字节设成-1 ,-1 -1 ,-10   结果就变成-10????
          <br/>
          <span style="color:red;">
            <a href="http://cser.javaeye.com/blog/168856#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Mar 2008 19:14:57 +0800</pubDate>
        <link>http://cser.javaeye.com/blog/168856</link>
        <guid>http://cser.javaeye.com/blog/168856</guid>
      </item>
  </channel>
</rss>