ObjectOutputStream

本文介绍了如何利用Java的FileOutputStream、BufferedOutputStream和ObjectOutputStream流来持久化一个类(Student)的实例,包括文件的追加写入、读取以及解决ObjectInputStream读取ObjectOutputStream时产生的StreamCorruptedException问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要根据用户选择,向一个文件写一个类(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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值