对象序列化中多次写入文件头的问题
来源:互联网 发布:淘宝双色球在哪里 编辑:程序博客网 时间:2024/06/05 14:27
此问题有三种解决办法
1,重写ObjectOutputStream的writeStreamHeader()方法
2,在使用ObjectInputStream读取的时候每次都先读取文件头
3,在使用ObjectOutputStream写入文件时,将文件指针向前挪动到写入的文件头,将new FileOutputStream对象时写入的文件头覆盖
这里演示第三种方案(从源代码中可以查看到写入的文件头为4个字节,于是将文件指针向前挪动4个字节,将文件头覆盖,tag用于判断是不是第一次写入)
File f=new File("student.txt");
boolean tag = false;
if (f.length() > 0) {
tag = true;
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(f, true);
ObjectOutputStream out = new ObjectOutputStream(fos);
for (Student s :list){
if (tag) {
int pos = (int) (fos.getChannel().position() - 4);
fos.getChannel().truncate(pos);
}
out.writeObject(s);
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
boolean tag = false;
if (f.length() > 0) {
tag = true;
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(f, true);
ObjectOutputStream out = new ObjectOutputStream(fos);
for (Student s :list){
if (tag) {
int pos = (int) (fos.getChannel().position() - 4);
fos.getChannel().truncate(pos);
}
out.writeObject(s);
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
阅读全文
1 0
- 对象序列化中多次写入文件头的问题
- C/C++中头文件多次包含的问题
- ObjectOutputStream在文件末尾多次追加写入对象的解决方案
- 关于将Java中序列化对象写入byte[]遇到的一些问题及解决方法
- 头文件中全局函数多次引用出现重定义的问题记录
- 函数放在头文件中被多次包含的重定义问题
- java 对象序列化写入文件
- java序列化多次序列化到同一个文件及反序列化的问题[转载]
- 对象序列化,向文件中写入对象,然后实现查询
- 多次创建object 写入对象文件中.java.io.StreamCorruptedException: invalid type code: AC解决办法
- inc中把版本号写入代码头文件的shell
- php对象的序列化(串行化)用作 写入文件或者网络传输
- java.io.NotSerializableException: 没实现序列化对象而写入文件流的报错
- 关于对象实例序列化加密解密并写入文件的技巧
- C#序列化/反序列化对象.将对象写入文件,从文件读取对象.
- 通过ObjectOutputStream向一个文件中多次以追加方式写入object的解决方案
- php中隐形字符65279(utf-8的BOM头)问题和fwrite写入文件bom头导致的乱码问题解决
- 对iOS中序列化的一些理解(写入文件)
- windows 批处理 获取当前目录及子目录的所有文件路径
- python中namedtuple的用法
- PIM独立组播协议
- bzoj4337: BJOI2015 树的同构 树hash
- 程序员必备的600个英语词汇合集(1)
- 对象序列化中多次写入文件头的问题
- 欢迎使用CSDN-markdown编辑器
- 11.5模拟
- java.lang.ClassNotFoundException: org.springframework.core.SpringProperties
- 增强学习(三)——Q-Learning
- 一些写代码的习惯
- Halcon学习(八)边缘检测(一)
- Glide加载转换Bitmap
- 自定义带标尺的seekbar