1. Главная
  2. Библиотека
  3. Программирование
  4. Почему-то при сериализации/десериализации объекта класс...
Разбор задачи

Почему-то при сериализации/десериализации объекта класса B возникают ошибки. Найди проблему и исправь ее. Класс A не должен реализовывать интерфейсы Serializable и Externalizable. В сигнатуре класса В ошибки нет :). В методе main ошибок нет.

  • Предмет: Программирование
  • Автор: Кэмп
  • #Языки программирования (C++, Java, Python и др.)
  • #Разработка и тестирование программного обеспечения
Почему-то при сериализации/десериализации объекта класса B возникают ошибки. Найди проблему и исправь ее. Класс A не должен реализовывать интерфейсы Serializable и Externalizable. В сигнатуре класса В ошибки нет :). В методе main ошибок нет.

Условие:

Почему-то при сериализации/десериализации объекта класса B возникают ошибки.

Найди проблему и исправь ее.

Класс A не должен реализовывать интерфейсы Serializable и Externalizable.

В сигнатуре класса В ошибки нет :).

В методе main ошибок нет.
\npackage com.javarush.task.task20.task2018;
\nimport java.io.*;

/*
Найти ошибки
*/
\npublic class Solution {
public static class A {

protected String nameA = "A";

public A(String nameA) {
this.nameA += nameA;
}
}

public class B extends A implements Serializable {

private String nameB;

public B(String nameA, String nameB) {
super(nameA);
this.nameA += nameA;
this.nameB = nameB;
}
}

public static void main(String[] args) throws IOException, ClassNotFoundException {
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(arrayOutputStream);

Solution solution = new Solution();
B b = solution.new B("B2", "C33");
System.out.println("nameA: " + b.nameA + ", nameB: " + b.nameB);

oos.writeObject(b);

ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());
ObjectInputStream ois = new ObjectInputStream(arrayInputStream);

B b1 = (B) ois.readObject();
System.out.println("nameA: " + b1.nameA + ", nameB: " + b1.nameB);
}
}

Решение:

В вашем коде есть несколько проблем, которые приводят к ошибкам при сериализации и десериализации объекта класса B. Давайте разберем их и исправим.

  1. Проблема с полем nameA: Поле nameA в классе A не является transient, поэтому оно будет сериализовано. Однако, поскольку класс A не реализует интерфейс Serializable, это приведет к ошибке при сериализации.

  2. Конструктор класса B: В конструкторе класса B вы дважды добавляете значение nameA, что не является необходимым.

  3. Необходимость в transient: Если вы хотите, чтобы поле nameA не сериализовалось, вы можете сделать...

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

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Какая проблема возникает при сериализации объекта класса B, если его родительский класс A не реализует интерфейс `Serializable`?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод

Выбери предмет