1. Как сделать readExternal() ? Если список не равен нулю, как определить сколько объектов из List<Person> children (детей) writeExternal() (записалось) в файл, чтобы потом их правильно readExternal() (десериализовывать)?
2. У Person person = new Person("Vadim", "Mayer", 57) двое детей, и если у тех двоих детей: у одного два ребенка, у второго три. Как это все записать в файл, чтобы потом можно было это правильно десериализовывать , ведь у каждого ребенка будут свои поля private String firstName; private String lastName; private int age; private Person mother; private Person father; как не запутаться, чьи поля относятся к кому в файле, чтобы это правильно десериализовывать?
Person person = new Person("Vadim", "Mayer", 57);
Person mother = new Person("Larisa", "Mayer", 80);
Person father = new Person("None", "None", 0);
person.setMother(mother);
person.setFather(father);
List<Person> kids = new ArrayList<>();
kids.add(new Person("Frank", "Mayer", 30));
kids.add(new Person("Jessica", "Mayer", 27));
person.setChildren(kids);
package com.javarush.task.task20.task2013;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
import java.util.List;
/*
Externalizable Person
*/
public class Solution {
public static class Person implements Externalizable {
private String firstName;
private String lastName;
private int age;
private Person mother;
private Person father;
private List<Person> children;
public Person () {
}
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public void setMother(Person mother) {
this.mother = mother;
}
public void setFather(Person father) {
this.father = father;
}
public void setChildren(List<Person> children) {
this.children = children;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(mother);
out.writeObject(father);
out.writeObject(firstName);
out.writeObject(lastName);
out.writeInt(age);
if (children != null) {
for (Person person: children) {
out.writeObject(person);
}
}
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
firstName = (String) in.readObject();
lastName = (String) in.readObject();
father = (Person) in.readObject();
mother = (Person) in.readObject();
age = in.readInt();
Object object;
while ((object = in.readObject()) != null) {
children.add((Person) object);
}
}
}
public static void main(String[] args) {
Person person = new Person("Vadim", "Mayer", 57);
Person mother = new Person("Larisa", "Mayer", 80);
Person father = new Person("None", "None", 0);
person.setMother(mother);
person.setFather(father);
List<Person> kids = new ArrayList<>();
kids.add(new Person("Frank", "Mayer", 30));
kids.add(new Person("Jessica", "Mayer", 27));
person.setChildren(kids);
}
}