Прошу помочь разобраться с механизмом тестирования:
1. Для чего нужно "4) создать другой экземпляр класса Solution с другим параметром"? (у меня он записан как Solution otherObject = new Solution(3))
2. Для чего вообще создавать какие-либо экземпляры класса, ведь запись в файл будет произведена по первой строке main'a (new Solution(4))?
2.1. Почему сохраняются поля именно new Solution(4), тогда как я записываю new Solution(-10)?
И отдельные вопросы:
3. Как понять какие поля нужно помечать transient, а какие нет? Какими критериями нужно пользоваться?
4. В каких случаях на практике нужна сериализация/десиреализация? Не понимаю самой необходимости данного механизма, ведь значения полей можно сохранять не используя ObjectOutputStream, а пользоваться обычными потоками вроде FileInputStream...
Спасибо.
PS ссылки на видео и др материал прошу не скидывать. Посмотрел с пяток видео и с пяток сайтов. А результат такой:
- Посмотрел?
- Ага.
- Всё понятно?
- Ага.
- Что понятно?
- Ммм...
/**
Сериализуй класс Solution.
Подумай, какие поля не нужно сериализовать, пометь ненужные поля модификатором transient.
Объект всегда должен содержать актуальные итоговые данные.
Метод main не участвует в тестировании.
Написать код проверки самостоятельно в методе main:
1) создать файл, открыть поток на чтение (input stream) и на запись(output stream);
2) создать экземпляр класса Solution - savedObject;
3) записать в поток на запись savedObject (убедитесь, что они там действительно есть);
4) создать другой экземпляр класса Solution с другим параметром;
5) загрузить из потока на чтение объект - loadedObject;
6) проверить, что savedObject.string равна loadedObject.string;
7) обработать исключения.
Требования:
1. Поле pattern должно быть отмечено модификатором transient.
2. Поле currentDate должно быть отмечено модификатором transient.
3. Поле temperature должно быть отмечено модификатором transient.
4. Поле string НЕ должно быть отмечено модификатором transient.
*/
public class Solution implements Serializable {
public static void main(String[] args) throws IOException, ClassNotFoundException {
System.out.println(new Solution(4));
try(FileOutputStream fos = new FileOutputStream("out.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
FileInputStream fis = new FileInputStream("out.dat");
ObjectInputStream ois = new ObjectInputStream(fis)) {
Solution savedObject = new Solution(-10);
oos.writeObject(savedObject);
Solution otherObject = new Solution(3);
Solution loadedObject = (Solution) ois.readObject();
System.out.println(savedObject.string.equals(loadedObject.string));
}
}
private final transient String pattern = "dd MMMM yyyy, EEEE";
private transient Date currentDate;
private transient int temperature;
String string;
public Solution(int temperature) {
this.currentDate = new Date();
this.temperature = temperature;
string = "Today is %s, and the current temperature is %s C";
SimpleDateFormat format = new SimpleDateFormat(pattern);
this.string = String.format(string, format.format(currentDate), temperature);
}
@Override
public String toString() {
return this.string;
}
}