对象序列化中多次写入文件头的问题

来源:互联网 发布:淘宝双色球在哪里 编辑:程序博客网 时间: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();
            } 

阅读全文
1 0