首先,我已经创建并利用了一个重写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();
}
}
从我对该主题所做的所有研究中,我似乎都找不到导致错误的原因。任何帮助将不胜感激。