@AshFTW

Как в java записать класс в файл?

Имеется проект с генетическим алгоритмом оптимизацией, где каждый результат должен записываться в файл. В файл записывается, но записывается так: <заголовок><данные><заголовок><данные> ... <заголовок><данные>, из-за чего при чтении файла вылетает ошибка 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. Далее он пытается прочитать каждый результат в этом файле.
  • Вопрос задан
  • 351 просмотр
Пригласить эксперта
Ответы на вопрос 1
abs0lut
@abs0lut
А не проще ли в JSON писать?
class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}

(Serialization)
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 
==> json is {"value1":1,"value2":"abc"}

(Deserialization)
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);  
==> obj2 is just like obj
"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы