@Aleksey2411

Сериализация Java. Как записать несколько объектов в файл?

Можно ли сериализировать два экземпляра одного класса в один выходной поток (файл)? И если можно, то как?

public class Main {

    public static void main(String[] args) {

        try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat", false))) {
            Person p = new Person("Sam", 33, 178, true);
            Person p2 = new Person("John", 40, 165, false);
            oos.writeObject(p);
            oos.writeObject(p2);
        } catch(Exception ex) {
            System.out.println(ex.getMessage());
        }

        try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat"))) {
            Person p = (Person) ois.readObject();
            System.out.println(p.getName());
            System.out.println(p.getAge());
            System.out.println(p.getHeight());
            System.out.println(p.getMarried());
        } catch (Exception e) {
            e.fillInStackTrace();
        }
    }
}

class Person implements Serializable {

    private static final long serialVersionUID = 1L;

    private String name;
    private int age;
    private double height;
    private boolean married;

    Person(String name, int age, double height, boolean married) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.married = married;
    }

    String getName() { return name; }
    int getAge() { return age; }
    double getHeight() { return height; }
    boolean getMarried() { return married; }
}


Output:
Sam
33
178.0
true

Непонятно, почему считался именно этот экземпляр ( Догадываюсь, потому что он был записан первым ). Если вызвать еще раз .readObject(), то считывается этот же экземпляр.

UPD: Вопрос решен. Нужно просто последовательно сначала записать, а потом считать объекты.
  • Вопрос задан
  • 642 просмотра
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
public class Main {

    public static void main(String[] args) {

        try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat", false))) {
            Person p = new Person("Sam", 33, 178, true);
            Person p2 = new Person("John", 40, 165, false);
            oos.writeObject(p);
            oos.writeObject(p2);
        } catch(Exception ex) {
            System.out.println(ex.getMessage());
        }

        try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat"))) {
            Person p = (Person) ois.readObject();
            System.out.println(p.getName());
            System.out.println(p.getAge());
            System.out.println(p.getHeight());
            System.out.println(p.getMarried());

            Person p2 = (Person) ois.readObject();
            System.out.println(p2.getName());
            System.out.println(p2.getAge());
            System.out.println(p2.getHeight());
            System.out.println(p2.getMarried());
        } catch (Exception e) {
            e.fillInStackTrace();
        }
    }
}


Output:
Sam
33
178.0
true
John
40
165.0
false

Может я не понял вопрос?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽