readObject throwing ClassNotFoundException при десериализации объектов из независимого класса [duplicate]

Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.

Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).

Пример

  var name = p?.Spouse?.FirstName;

эквивалентен:

    if (p != null)
    {
        if (p.Spouse != null)
        {
            name = p.Spouse.FirstName;
        }
    }

В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.

В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.

Для получения дополнительной информации: Операторы с нулевым условием

7
задан eruina 26 May 2010 в 20:29
поделиться

2 ответа

Имя пакета и имя класса должны быть одинаковыми с обеих сторон. То есть пишите один раз, скомпилируйте один раз, а затем передайте обеим сторонам ту же копию. У вас нет отдельных классов server.Message и client.Message, но один shared.Message класс или что-то в этом роде.

Если вы можете гарантировать одно и то же имя пакета / класса, но не всегда, когда это точно той же копии, тогда вам нужно добавить поле serialVersionUID с тем же значением в класс (es), о котором идет речь.

package shared;

import java.io.Serializable;

public class Message implements Serializable {
    private static final long serialVersionUID = 1L;

    // ...
}
17
ответ дан BalusC 28 August 2018 в 21:31
поделиться
  • 1
    И, пожалуйста, не делайте serialUID ровно 1L, потому что это может помешать другому глупому разработчику, имеющему ту же идею. – Daniel 26 May 2010 в 21:12
  • 2
    Он работает сейчас! Спасибо, ~ !! Наконец я наконец понял, что происходит – eruina 27 May 2010 в 04:18
  • 3
    Пожалуйста. – BalusC 27 May 2010 в 12:16
  • 4
    @ BalusC- Это круто. Я несколько дней ломаю голову над ним. – P R 3 October 2011 в 12:46
  • 5
    Работает как churm, 7 лет вниз по линии - & quot; Не имеют отдельного сервера.Message и client.Message классы, но один shared.Message класс или что-то в этом роде. Если вы можете гарантировать одно и то же имя пакета / класса, но не всегда, когда это точно такая же копия, & quot; – crakama 7 May 2018 в 14:55

Причина в том, что readObject () в ObjectInputStream практически реализуется как:

 String s = readClassName();
 Class c = Class.forName(s); // Here your code breaks
 Object o = c.newInstance();
 ...populate o...
4
ответ дан Daniel 28 August 2018 в 21:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: