При попытке реализовать код из задачки про человека, у которого есть кот и собака возник вопрос: Собственно есть человек: 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 натыкается на конец файла. Можете объяснить особенности такой реализации сохранения/загрузки объектов?