7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 52
1

Подобие сериализации

05.07.2017, 12:49. Показов 1061. Ответов 4
Метки нет (Все метки)

Привет!Вот я прохожу сервис жавараш,на уровне -сериализация.Там сперва
учат как просто сохранить объект в файл.Таким образом
Сегодня мы познакомимся с еще одной интересной темой. А именно: сохранением и загрузкой (восстановлением) объектов. Допустим у нас есть класс Cat:
Код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Cat
{
 public String name;
 public int age;
 public int weight;
}
 
И мы хотим добавить в него удобный механизм сохранения в файл и загрузки из файла.
 
Вот как это можно сделать:
Код
 
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());
 }
}
— О! Это же очень просто. Мы просто печатаем значения всех аргументов, по одному в каждой строчке. А при загрузке читаем их в том же порядке. Отличное решение.
Мне нужно решить такую задачу
Читаем и пишем в файл: Human

Реализуй логику записи в файл и чтения из файла для класса Human.
Поле name в классе Human не может быть пустым.
Метод main реализован только для вас и не участвует в тестировании.

Требования:
1. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если список assets пустой.
2. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если поле name и список assets не пустые.
3. Класс Solution.Human не должен поддерживать интерфейс Serializable.
4. Класс Solution.Human должен быть публичным.
5. Класс Solution.Human не должен поддерживать интерфейс Externalizable.
Решаю так.Пишет и читает в/из файла.Клаас Asset не пишу-тут все работает.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
 
public class Solution {
    public static void main(String[] args) {
        //исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
        try {
 
           // File your_file_name = File.createTempFile("save", ".txt");
            OutputStream outputStream = new FileOutputStream("d:/ser.txt");
            InputStream inputStream = new FileInputStream("d:/ser.txt");
            
            
 
            Human ivanov = new Human("Ivanov", new Asset("home"), new Asset("car"));
            ivanov.save(outputStream);
            outputStream.flush();
 
           Human somePerson = new Human();
            somePerson.load(inputStream);
            //check here that ivanov equals to somePerson - проверьте тут, что ivanov и somePerson равны
            System.out.println(ivanov.equals(somePerson));
            
            System.out.println(ivanov.name);
            System.out.println(ivanov.assets);
            
            for(Asset a : ivanov.assets){
                System.out.print(a.getName()+"\n"+a.getPrice()+"\n");
            }
            outputStream.close();
            inputStream.close();
 
        } catch (IOException e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with my file");
        } catch (Exception e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with save/load method");
        }
    }
 
 
    public static class Human {
        public String name;
        public List<Asset> assets = new ArrayList<>();
 
        public Human() {
        }
 
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
 
            Human human = (Human) o;
 
            if (name != null ? !name.equals(human.name) : human.name != null) return false;
            return assets != null ? assets.equals(human.assets) : human.assets == null;
 
        }
 
        @Override
        public int hashCode() {
            int result = name != null ? name.hashCode() : 0;
            result = 31 * result + (assets != null ? assets.hashCode() : 0);
            return result;
        }
 
        public Human(String name, Asset... assets) {
            this.name = name;
            if (assets != null) {
                this.assets.addAll(Arrays.asList(assets));
            }
        }
 
        public void save(OutputStream outputStream) throws Exception {
            //implement this method - реализуйте этот метод
            PrintWriter writer=new PrintWriter(outputStream);
            String isNamePresent=name.isEmpty()?"no":"yes";
            writer.println(isNamePresent);
           if(isNamePresent.equals("yes")){
                writer.println(this.name);
                
            }
            String isAssets=assets.isEmpty()?"no":"yes";
//            if(assets.isEmpty()){
//                writer.println(isAssetsEmpty);
//                
//            }
            writer.println(isAssets);
            if(isAssets.equals("yes")){
                for(Asset a : assets){
                 writer.println(a.getName());
                 writer.println(a.getName());
                }
            }
            writer.close();
            
        }
            
            
        
 
        public void load(InputStream inputStream) throws Exception {
            //implement this method - реализуйте этот метод
            BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
            String isNanePresent=reader.readLine();
            if(isNanePresent.equals("yes")){
                String name=reader.readLine();
                this.name=name;
                 }
            String isAssetsPresent=reader.readLine();
            if(isAssetsPresent.equals("yes")){
              assets = new ArrayList<>();
              for(int i=0;i<assets.size();i++){
               assets.add(new Asset(reader.readLine()));
               assets.add(new Asset(reader.readLine()));
              }
            }
            reader.close();
        }
    }
}
Валидатор принял про то что name не должно быть пустым.А вот вот такое выдает требование
Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если поле name и список assets не пустые.
Какое в классе нужно поставить условие?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2017, 12:49
Ответы с готовыми решениями:

Вопрос по сериализации
здравствуйте, не могли бы вы мне обьяснить чем отличается сериализация от простой записи в бинарный...

Стандартный протокол сериализации
Здравствуйте в задании сказано что запрещено использовать стандартный протокол сериализации как...

Сохранение данных при сериализации
Всем привет, возник вопрос делаю ввод данных далее сериализацию, возник вопрос как можно сохранять...

Странные вещи при сериализации
(РЕШЕНА) Столкнулся со странным для меня поведением джавы при сериализации. Саму проблему...

4
Эксперт Java
3636 / 2968 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.07.2017, 22:38 2
Закрываешь javarush, удаляешь на него закладку в браузере, берешь книжку, читаешь, начинаешь с helloWorld
0
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 52
06.07.2017, 08:23  [ТС] 3
Я книгу прошел,а жавараш очень помогает)
0
RedPatrick
06.07.2017, 15:30
  #4

Не по теме:

Konst2016, Дело вам говорят, джавараш помогает только своим создателям заработать деньжат со стартапа 8-)

0
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 52
06.07.2017, 16:30  [ТС] 5
Все решил)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2017, 16:30
Помогаю со студенческими работами здесь

Десериализированные объекты не равны объектам до сериализации, почему?
Здравствуйте, уважаемые форумчане! Могли бы объяснить: почему десериализированные объекты не...

Подобие командной строки
Реализовать консольную программу на Java, которая бы представляла некую реализацию командной...

Игра на Java (подобие морского боя)
В поле размером 10 на 10 клеток случайным образом появляются 7 танков. Игрок делает ставку и...

Хочу сделать игру на подобие кто хочет стать миллионером?
Я только начинаю познавать азы этого прекрасного языка, но очень захотелось создать подобную игру,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru