黑马程序员技术交流社区
标题:
StreamCorruptedException异常问题?
[打印本页]
作者:
刘经鹏
时间:
2012-12-24 21:33
标题:
StreamCorruptedException异常问题?
通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
作者:
冯伟超
时间:
2012-12-24 22:17
序列化id:
我们把一个对象按照流的方式写入到文件中,它会同时有一个serialVersionUID值写入。
表示我们的.txt文件和我们的class文件一一对应。
当我们改动了java文件后,class文件就改变了,所以serialVersionUID值就变化了。
作者:
冯伟超
时间:
2012-12-24 22:19
如果你不太明白:下面我举一些列子你可以参考下:
public class ObjectDemo
{
/**
* @param args
* @throws IOException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException
{
Person p1=new Person("小刚",34);
//show_1(p1);
show_2(p1);
}
private static void show_2(Person p) throws FileNotFoundException, IOException, ClassNotFoundException
{
ObjectInputStream obi=new ObjectInputStream(new FileInputStream("avn.txt"));
//Object obj=new Object();
Object obj = obi.readObject();
p=(Person)obj;
System.out.println(p.getName()+"***"+p.getAge());
}
public static void show_1(Person p) throws IOException, IOException
{
ObjectOutputStream obs=new ObjectOutputStream(new FileOutputStream("avn.txt"));
//序列化解决问题一:在对象中实现序列化接口Serializable,这个是针对对象的操作而言的
obs.writeObject(p);
//序列话的问题解决问题方式二:
/* try
{
obs.writeObject(p);
} catch (NotSerializableException e)
{
// TODO Auto-generated catch block
//e.printStackTrace();
}*/
obs.flush();
obs.close();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2