如何将对象附加到数据文件?

时间:2019-05-19 23:14:38

标签: java java-io

首先,我已经创建并利用了一个重写ObjectOutputStream中的writeStreamHeader()方法的子类。我需要强调这一点,因为提出此问题的所有其他问题似乎都可以作为解决方案。

每次将一个以上的对象写入数据文件时,它都会引发StreamCorruptedException: invalid type code: AC错误。

这是我到目前为止所拥有的:

public class DataWriter {

        public static void createStats(Stats s) {

            File stats = new File("stats.dat");
            ObjectOutputStream statsOos = null;

            try {
                 boolean isNew = false;

                if(!stats.exists()) {
                    stats.createNewFile();
                    isNew = true;
                }

                 FileOutputStream fos = new FileOutputStream(stats, true);

                if(isNew) {
                    statsOos = new ObjectOutputStream(fos);
                } else {
                    System.out.println("Append");
                    statsOos = new AppendableObjectOutputStream(new ObjectOutputStream(fos));
                }

                if(s != null) {
                    statsOos.writeObject(s);
                    statsOos.flush();
                    statsOos.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            } 
        }

    }

    public class DataReader {

        public static ArrayList<Stats> readStats() {
            File stats = new File("stats.dat");
            if (stats.exists()) {
                ArrayList<Stats> stat = new ArrayList<Stats>();
                try {

                    FileInputStream fis = new FileInputStream(stats);
                    ObjectInputStream ois = new ObjectInputStream(fis);
                    Object obj = null;
                    while((obj=ois.readObject()) != EOFException.class) {
                        if (obj instanceof Stats) {
                            stat.add((Stats)obj);
                        }
                    }
                    ois.close();


                } catch (FileNotFoundException e) {
                    e.printStackTrace();

                } catch (IOException e) {
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }

                return(stat);
            } else {
                DataWriter.createStats(new Stats());
                return readStats();
            }
    }

    public class AppendableObjectOutputStream extends ObjectOutputStream {

        public AppendableObjectOutputStream(OutputStream out) throws IOException {
            super(out);
        }

        @Override
        protected void writeStreamHeader() throws IOException {
            reset();
        }

    }

从我对该主题所做的所有研究中,我似乎都找不到导致错误的原因。任何帮助将不胜感激。

0 个答案:

没有答案
相关问题