我运行以下代码会出现这样的异常StreamCorruptedExceptionimport java.io.*;
import java.io.FileOutputStream;class user implements java.io.Serializable
{
String name;
String sex;
String address;
}
public class stream {
public stream()
{
}
public static void main(String[] args)
{
new stream();
user objuser = new user();
objuser.name="wangyuting";
objuser.sex="gril";
objuser.address="chengdu";
user objuser1 = new user();
objuser1.name="wangyuting116";
objuser1.sex="gril";
objuser1.address="chengdu";
try
{
ObjectOutputStream oop=new ObjectOutputStream(new FileOutputStream("client1.txt",true));
oop.writeObject(objuser);
oop.close();
ObjectOutputStream oops=new ObjectOutputStream(new FileOutputStream("client1.txt",true));
oops.writeObject(objuser1);
oops.close();
}
catch(IOException e)
{
e.printStackTrace();
}
try{
ObjectInputStream oip=new ObjectInputStream(new FileInputStream("client1.txt"));
user obj=(user)oip.readObject();
System.out.println(obj.name);
System.out.println(obj.sex);
System.out.println(obj.address);
obj=(user)oip.readObject();
System.out.println();
System.out.println(obj.name);
System.out.println(obj.sex);
System.out.println(obj.address);
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
当两个对象是一次写如文件时,两个对象都可以读出来;但是如果是一次写一个的话,就只能读出第一个对象,而且读第二个对象的时候就会出现StreamCorruptedException
诚请各位高手给我一个具体的解决方法吧!
import java.io.FileOutputStream;class user implements java.io.Serializable
{
String name;
String sex;
String address;
}
public class stream {
public stream()
{
}
public static void main(String[] args)
{
new stream();
user objuser = new user();
objuser.name="wangyuting";
objuser.sex="gril";
objuser.address="chengdu";
user objuser1 = new user();
objuser1.name="wangyuting116";
objuser1.sex="gril";
objuser1.address="chengdu";
try
{
ObjectOutputStream oop=new ObjectOutputStream(new FileOutputStream("client1.txt",true));
oop.writeObject(objuser);
oop.close();
ObjectOutputStream oops=new ObjectOutputStream(new FileOutputStream("client1.txt",true));
oops.writeObject(objuser1);
oops.close();
}
catch(IOException e)
{
e.printStackTrace();
}
try{
ObjectInputStream oip=new ObjectInputStream(new FileInputStream("client1.txt"));
user obj=(user)oip.readObject();
System.out.println(obj.name);
System.out.println(obj.sex);
System.out.println(obj.address);
obj=(user)oip.readObject();
System.out.println();
System.out.println(obj.name);
System.out.println(obj.sex);
System.out.println(obj.address);
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
当两个对象是一次写如文件时,两个对象都可以读出来;但是如果是一次写一个的话,就只能读出第一个对象,而且读第二个对象的时候就会出现StreamCorruptedException
诚请各位高手给我一个具体的解决方法吧!
解决方案 »
- 求助:如何获得ThreadPoolExecutor中阻塞了多少个线程
- 出血了!!整合一套培训时候的视频和笔记很HAPPY,从基础到框架要的可以留个邮箱!
- 如何把BufferedImage设置背景为透明
- 请问java中对于public的static何时可以删除,以及void的使用原则给介绍一下
- 哪位哥们能帮兄弟个忙。。
- 大家好,对你们来说很easy的问题,关于读取文件中的的疑问?
- 初学者的小问题 呵呵~~
- 请问哪位高手可以把bufferimage对象回写成bmp格式得图片?
- 很菜的一个问题,拜托了!
- 如何设置jdbtable中列的宽度(像素)
- 关于Sring查找问题
- JTable 与数据库相关 ??
我现在找到原因了,原因和解决方法如下:
使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应.ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.
一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,若是,则调用super.writeStreamHeader();若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法.