В качестве предисловия я уже создал и использовал подкласс, который переопределяет метод writeStreamHeader()
в ObjectOutputStream.Я должен подчеркнуть это, поскольку каждая другая проблема, которая задала этот вопрос, похоже, имеет это в качестве решения.
Каждый раз, когда в файл данных записывается более одного объекта, он выдает ошибку 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();
}
}
Я не могу найти причину ошибки во всех исследованиях, которые я провел по этой теме.Любая помощь будет принята с благодарностью.