序列化追加问题
在序列化时,会直接覆盖一个之前的存档,如果实现数据库式的格式,就需要追加对象。网上有对序列化问题的解决办法。理解这种方法需要知道一个知识的是序列化的时候除了存储数据,还会生成一个头数据块,那么在第二次写入的时候就会重复读取头数据块,所以就会报错。所以这个方法就是重写inpotstream和outpotstream里的写入和读取方法。
我的方法相对好理解一点,但是也有局限性。我的方法是将存进去的读取出来,添加要追加的内容,在存进去。这里我已以数组为例。
方法源码
下面展示一些 内联代码片。
// A code block
var foo = 'bar';
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Text_xuliehua2 {
public static void main(String[] args) throws Exception {
User[] users1= {new User("王华",18),new User("二哈",20)};
User[] users2= {new User("春娇",20),new User("志明",30)};
xie(users1);//写入第一个数组
User[] users01=du();//读取第一个数组
xie(pin(users01, users2));//执行数组相加,并实现序列化
User[] users02=du();//反序列化
//遍历读取数组
for(User user:users02) {
System.out.println(user);
}
}
//序列化
public static void xie(User[] users) throws Exception {
FileOutputStream fos=new FileOutputStream(new File("f:\\Text\\java.data"));
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(users);
fos.close();
}
//反序列化
public static User[] du() throws Exception {
FileInputStream fileInputStream=new FileInputStream(new File("f:\\Text\\java.data"));
ObjectInputStream inputStream=new ObjectInputStream(fileInputStream);
User[] users=(User[]) inputStream.readObject();
// for(User user:users) {
// System.out.println(user);
// }
fileInputStream.close();
return users;
}
//数组进行相加
public static User[] pin(User[] users1,User[] users2) {
User[] usersall=new User[users1.length+users2.length];
for (int i = 0; i < users1.length; i++) {
usersall[i]=users1[i];
}
for (int i = 0; i < users2.length; i++) {
usersall[i+users1.length]=users2[i];
}
return usersall;
}
}
607

被折叠的 条评论
为什么被折叠?



