ObjectOutputStream

要根据用户选择,向一个文件写一个类(Student)的实例,使用FileOutputStream、BufferedOutputStream与ObjectOutputStream流,FileOutputStream初始化为:
fileOutputStream = new FileOutputStream(fileStorage, true); // fileStorage是File的实例或是字符串形式。追加写(append=true)
使用objectOutputStream.writeObject(student)进行写入,写入前建立流,写入后关闭流(如果不关闭,会写不进去)。
student = (Student) objectInputStream.readObject()用来读出。读出前建立流,读出后关闭流(如果不关闭,会读不出来)。
由于每一次启动写操作时都会写入一个标记头,造成读入时只能读取第一个写入的记录。
ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.
所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.
一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.
被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,是则调用super.writeStreamHeader();


你可能感兴趣的:(ObjectOutputStream)