Вопрос по java – java.io.InvalidClassException: несовместимый локальный класс:

22

Error: User Rate Limit Exceededclassname.classError: User Rate Limit Exceededclassname.javaError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Exception in thread "main" java.io.InvalidClassException: projectname.clasname; local class incompatible: stream classdesc serialVersionUID = -6009442170907349114, local class serialVersionUID = 6529685098267757690
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1582)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)

Error: User Rate Limit Exceeded

EDIT
import java.io.Serializable;
import java.net.URL;

public class KeyAdr implements Serializable {
  private static final long serialVersionUID = 6529685098267757690L;

  public URL adr;
  public String key;
}

Ваш Ответ

5   ответов
0

@EJP Вот ссылка:Versioning of Serializable Objects
Это хрупко даже тогда.
Я могу согласиться до некоторой степени за постоянство, но нет ничего плохого в использовании Java Serialization в качестве транспортного формата. Это слишком хрупко, если кто-то не знает таких концепций Java-сериализации, какserialVersionUID& APOS; с.
На самом деле это не так. Может быть, мы просто видим «сериализацию Java»; мир с разноцветными очками. Кроме того, это практически единственный вариант при использовании RMI. Кроме того, я вижу, что вы сделали какой-то комментарий о том, что «менеджер проекта скинул что-то» который был отредактирован позже ...
"Малейшая разница в байт-коде класса и JVM, и ваши данные больше не читаются". Это просто неправда. См. Раздел «Управление версиями объектов» в спецификации «Сериализация объектов».
35

private static final long serialVersionUIDserialVersionUID

Serializable:

If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members. Array classes cannot declare an explicit serialVersionUID, so they always have the default computed value, but the requirement for matching serialVersionUID values is waived for array classes.

serialVersionUID

class MyClass implements Serializable {
    private static final long serialVersionUID = 6529685098267757690L;
    ...
все та же ошибка происходит lonesome
попробуйте очистить выходы проекта (.class файлы, созданные во время компиляции) и пересобрать (перекомпилировать) проекты.
я даже сделал два новых проекта с тем же именем и создал классы с самого начала, но все же это происходит lonesome
Это странно. Я бы дважды проверил, что обе стороны используют новейшую версию класса.
как настроить serialVersionUID в определении? lonesome
2

1: you create your serialized data with a given library A (version X) 2: you then try to read this data with the same library A (but version Y)

0

0

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