Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53

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

05.07.2017, 12:49. Показов 1342. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.07.2017, 12:49
Ответы с готовыми решениями:

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

Стандартный протокол сериализации
Здравствуйте в задании сказано что запрещено использовать стандартный протокол сериализации как тогда сохранить массив объектов?

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

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

Не по теме:

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

0
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53
06.07.2017, 16:30  [ТС]
Все решил)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.07.2017, 16:30
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru