Имеется проект с генетическим алгоритмом оптимизацией, где каждый результат должен записываться в файл. В файл записывается, но записывается так: <заголовок><данные><заголовок><данные> ... <заголовок><данные>, из-за чего при чтении файла вылетает ошибка java.io.StreamCorruptedException: invalid type code: AC, поэтому мне нужно, что бы файл записывался как <заголовок><данные><данные>...<данные>. Я не знаю как правильнее это будет сделать, поэтому вот код:
String fileName = "data.bin";
try {
FileOutputStream fileOs = new FileOutputStream(fileName,true);
ObjectOutputStream os = new ObjectOutputStream(fileOs);
os.writeObject(m);
os.flush();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
FileInputStream fileIs = new FileInputStream(fileName);
final ObjectInputStream is = new ObjectInputStream(fileIs);
List<Model> models = new ArrayList<>();
int counted = 0;
while(true) {
try {
Model model = (Model) is.readObject();
counted++;
models.add(model);
System.out.println("i="+counted+", model = "+model.toString()+"; fithess = "+m.fitness);
} catch (EOFException e) {
is.close();
fileIs.close();
break;
} catch (ClassNotFoundException e) {
e.printStackTrace();
is.close();
fileIs.close();
break;
}
}
System.out.println("Counted "+counted);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Что делает код: создаёт файл data.bin, записывает в него результат выполнения алгоритма (класс Model), затем сохраняет и закрывает output stream. Далее он пытается прочитать каждый результат в этом файле.