При попытке реализовать код из задачки про человека, у которого есть кот и собака возник вопрос:
Собственно есть человек:
class Human
{
public Cat cat;
public Dog dog;
public void save(OutputStream outputStream) throws Exception
{
PrintWriter writer = new PrintWriter(outputStream);
String isCatPresent = cat != null ? "yes" : "no";
writer.print(isCatPresent);
if (cat!=null)
cat.save(outputStream);
String isDogPresent = dog != null ? "yes" : "no";
writer.print(isDogPresent);
if (dog != null)
dog.save(outputStream);
}
public void load(InputStream inputStream) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String isCatPresent = reader.readLine();
if (isCatPresent.equals("yes"))
{
cat = new Cat();
cat.load(inputStream);
}
String isDogPresent = reader.readLine();
if (isDogPresent.equals("yes"))
{
dog = new Dog();
dog.load(inputStream);
}
}
}
У него есть кот:
class Cat
{
public String name;
public int age;
public int weight;
public void save(OutputStream outputStream) throws Exception
{
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println(name);
printWriter.println(age);
printWriter.println(weight);
printWriter.flush();
}
public void load(InputStream inputStream) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
name = reader.readLine();
age = Integer.parseInt(reader.readLine());
weight = Integer.parseInt(reader.readLine());
}
}
И есть собака:
class Dog
{
public String name;
public int age;
public void save(OutputStream outputStream) throws Exception
{
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println(name);
printWriter.println(age);
printWriter.flush();
}
public void load(InputStream inputStream) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
name = reader.readLine();
age = Integer.parseInt(reader.readLine());
}
}
На первый взгляд было все понятно и логично, но уже при реализации натолкнулся на проблему: в файл не записывалась переменная isCatPresent метода save класса Human. Методом проб и ошибок я добавил строкой ниже writer.flush(); Все записывается, все чудесно. Но дальше пошли проблемы с прочтением: метод load класса Human считывает строку из файла, присваивает ее переменной isCatPresent, но при вызове метода load класса cat натыкается на конец файла.
Можете объяснить особенности такой реализации сохранения/загрузки объектов?
Это изменение не играет роли.
Но конечно же его можно вызвать вручную.
Я подправил Вашу программу, всё работает. Ошибки сами увидите :)
Класс Мейн:
Класс Human: