Задачу то я решил, но только когда она были принята я подумал а почему в методе load() не надо создавать новый экземпляр users? user = new ArrayList<>() и затем в него записыввать данные файла. Ведь при загрузки обекта его состояние должно быть считано из потока и быть точно такое же как и в потоке, но что если перед считываением состояния из потока в users уже будут какие то значения? Данные из потока ведь просто добавятся в этот список к тем что были там изначально. В правильном решение кстати так же как и у меня сделано. public void save(OutputStream outputStream) throws Exception { //implement this method - реализуйте этот метод if (users != null && users.size() > 0) { try (OutputStreamWriter osw = new OutputStreamWriter(outputStream); BufferedWriter writer = new BufferedWriter(osw)) { for (int i = 0; i < users.size(); i++) { User currentUser = users.get(i); writer.write(currentUser.getFirstName() + "\n"); writer.write(currentUser.getLastName() + "\n"); writer.write(currentUser.getBirthDate().getTime() + "\n"); writer.write(currentUser.isMale() + "\n"); writer.write(currentUser.getCountry() + "\n"); } } } } public void load(InputStream inputStream) throws Exception { //implement this method - реализуйте этот метод try (InputStreamReader isr = new InputStreamReader(inputStream); BufferedReader reader = new BufferedReader(isr)) { while (reader.ready()) { String firstName = reader.readLine(); String lastName = reader.readLine(); Date birthDate = new Date(Long.parseLong(reader.readLine())); boolean isMale = Boolean.parseBoolean(reader.readLine()); User.Country country = User.Country.valueOf(reader.readLine()); User user = new User(); user.setFirstName(firstName); user.setLastName(lastName); user.setBirthDate(birthDate); user.setMale(isMale); user.setCountry(country); users.add(user); } } }