通过ObjectOutputStream向一个文件中多次以追加方式写入object的解决方案
2009-05-26 13:05
246 查看
使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应。ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头。
因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头。所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException。一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法。
被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,则调用super.writeStreamHeader();若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法。
自己重写一个类继承ObjectOutputStream来成生对象输出流
因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头。所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException。一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法。
被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,则调用super.writeStreamHeader();若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法。
自己重写一个类继承ObjectOutputStream来成生对象输出流
]import java.io.*; public class MyObjectOutputStream extends ObjectOutputStream { public MyObjectOutputStream(OutputStream out) throws IOException { super(out); } protected void writeStreamHeader()throws IOException{ return; //不写入头部 } }
相关文章推荐
- ObjectOutputStream以追加方式写入文件
- ObjectOutputStream在文件末尾多次追加写入对象的解决方案
- 现象:起中文的文件名是乱码,通过程序往一个文件中写入中文是乱码。
- java字节流的方式复制一个文件,按数组读取和写入
- PHP 通过DOM方式创建一个book.xml文件
- 追加写入的方式的 写 csv文件
- JAVA如何以追加的方式向文件中写入信息?
- [Java] 将标准字符流写入到文件中(通过控制台写一个html程序,并保存)
- unity lua C# 这边 new 了一个GameObject 对象并发给Lua那边, 这时C# 这边在通过GC释放掉这个对象;lua 那边会报错;遇到这种问题的解决方案
- [导入]Visual Studio 中多个项目通过链接方式共享使用同一个文件
- 写入出字符串到一个文件而不覆盖原文件的内容(追加)
- 返回文件,不通过写入本地服务器的方式
- 通过调用同一个函数(参数不同)将数据写入文件和显示到屏幕上
- 通过文件方式,在文件内容开头写入字符串!
- 以追加方式写入文件的几种方法
- 一个通过VBA建立某文件快捷方式的例子 (备注)
- 一步一个脚印学习WCF系列之WCF概要—WCF服务的创建与调用HelloWorld实例,通过配置文件方式(六)
- JAVA如何以追加的方式向文件中写入信息
- PHP 通过DOM方式创建一个book.xml文件
- 获取系统URL访问的前三名(通过Scala方式实现/通过Spark方式实现),Spark将URL访问日志进行分类并通过自定义Partitioner的方式将文件写入到不同分区上