java 使用对象输出流ObjectOutputStream对文件追加对象注意
2014-06-09 22:43
381 查看
在使用java来存储对象是很简单的,但是需要追加对象时为了方便在能使用ObjectInputStream读取所有对象时(包括追加的对象),就需要要做些特别的处理。
首先能追加数据,那么在构造FileOutPutStream时注意。
创建一个向指定
创建一个向指定
其次为了能保证追加的对象被读取到,那么需要自己去新建一个对象输出流,并继承ObjectInputStream,并重写
提供 writeStreamHeader 方法,这样子类可以将其自身的头部添加或预加到流中。它可以将幻数 (magic number) 和版本写入流。如下代码网上参考的:
class ObjectOutputStreamForAddObject extendsObjectOutputStream {
private static File f;
writeStreamHeader()方法是在ObjectOutputStream的构造方法里调用的由于覆盖后的writeStreamHeader()方法用到了f。如果直接用构造方法创建一个MyObjectOutputStream对象,那么writeStreamHeader()中的f是空指针因为f还没有初始化。所以这里采用单态模式(将构造方法定义为私有的,然后通过方法获取对象,可以保证某个类只能存在一个对象示例)
public static ObjectOutputStreamForAddObject newInstance(File file,OutputStream out)
throws IOException {
f = file;
return new ObjectOutputStreamForAddObject(out);
}
private ObjectOutputStreamForAddObject(OutputStream out) throws IOException{
super(out);
}
@Override
protected void writeStreamHeader() throws IOException {
if (!f.exists() || (f.exists() &&f.length() == 0)) {
super.writeStreamHeader();
} else {
super.reset();
}
}
}最后 在将对象写入文件的时候是调用ObjectOutputStreamForAddObject类,记得调用flush(),close()方法哦。
以上才能保证追加对象不会出错。
首先能追加数据,那么在构造FileOutPutStream时注意。
FileOutputStream(File file, boolean append)
创建一个向指定
File对象表示的文件中写入数据的文件输出流
创建一个向指定
File对象表示的文件中写入数据的文件输出流。如果第二个参数为
true,则将字节写入文件末尾处,而不是写入文件开始处。创建一个新
FileDescriptor对象来表示此文件连接。
其次为了能保证追加的对象被读取到,那么需要自己去新建一个对象输出流,并继承ObjectInputStream,并重写
protected void writeStreamHeader() throws IOException
提供 writeStreamHeader 方法,这样子类可以将其自身的头部添加或预加到流中。它可以将幻数 (magic number) 和版本写入流。如下代码网上参考的:
class ObjectOutputStreamForAddObject extendsObjectOutputStream {
private static File f;
writeStreamHeader()方法是在ObjectOutputStream的构造方法里调用的由于覆盖后的writeStreamHeader()方法用到了f。如果直接用构造方法创建一个MyObjectOutputStream对象,那么writeStreamHeader()中的f是空指针因为f还没有初始化。所以这里采用单态模式(将构造方法定义为私有的,然后通过方法获取对象,可以保证某个类只能存在一个对象示例)
public static ObjectOutputStreamForAddObject newInstance(File file,OutputStream out)
throws IOException {
f = file;
return new ObjectOutputStreamForAddObject(out);
}
private ObjectOutputStreamForAddObject(OutputStream out) throws IOException{
super(out);
}
@Override
protected void writeStreamHeader() throws IOException {
if (!f.exists() || (f.exists() &&f.length() == 0)) {
super.writeStreamHeader();
} else {
super.reset();
}
}
}最后 在将对象写入文件的时候是调用ObjectOutputStreamForAddObject类,记得调用flush(),close()方法哦。
以上才能保证追加对象不会出错。
相关文章推荐
- 使用C++流对象打开文件的注意事项
- 在使用stringstream读文件行时,要注意把该对象放在循环内
- 关于java response的两种页面输出方式,以及HttpUrlconnection 代理使用注意点
- Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)
- fstream对象重复使用时注意clear()的调用,否则会造成打开第二个文件失败
- java文件对象的创建和使用(本文章只是初学者的笔记)
- java学习笔记 使用递归 将文件目录树形结构输出,递归删除目录 文件夹。
- 使用java反射技术完成对象所有属性值的输出
- java反射调用配置文件构造类对象,使用其方法
- 使用Java序列化把对象存储到文件中,再从文件中读出来
- 『编程练习』九九乘法表 与 使用文件对象的注意事项
- 在Java中,直接将类的对象使用system.out.println输出
- java中对象的比较---==与equals的使用注意事项
- 使用Digester解析XML文件和JAVA对象的映射
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- 下载文件使用缓存(一次性读取到内存),优化性能(注意静态对象修改需要加锁)
- 关于java对象流使用的细节注意
- JAVA学习中的一点小发现:LinkedList中.poll()方法在输出时使用应注意的小点
- java 序列化ObjectOutputStream 同一文件追加写对象问题的解决
- java 关于中文字的输出 输入 和文件操作(对象序列化)