标签: serialversionuid

scala类序列化,无法修复SerialVersionUID

我目前正在测试远程演员在Android和Windows之间进行通信.Actors远程发送不同的类,我设置serialVersionUID.

这是我的序列化类的代码:

@SerialVersionUID(13.asInstanceOf[Long]) case class IdentifyMessage(userName : String, user : User, code : Int)
Run Code Online (Sandbox Code Playgroud)

问题是远程actor调试说不兼容的类存在问题:

caught java.io.InvalidClassException: scala.actors.remote.Node; local class incompatible: 
stream classdesc serialVersionUID = -6610463074147725500, local class serialVersionUID = -7525549079045563153
Run Code Online (Sandbox Code Playgroud)

为什么我的SerialVersionUID对编译器无关紧要?

如何修复serialVersionUID?或者可能还有另一个问题?

谢谢

serialization scala serialversionuid remote-actors

8
推荐指数
1
解决办法
3749
查看次数

如何摆脱InvalidClassException SerialVersionUID?

我在数据库中保存了一个java对象,然后几天后我改变了我的jre版本.现在,当我试图读取同一个对象时,我得到以下异常:

Exception in thread "main" java.io.InvalidClassException:
SerializeMe; local class incompatible: stream classdesc
serialVersionUID = -6377573678240024862, local class serialVersionUID = -8204757486033751616
Run Code Online (Sandbox Code Playgroud)

我怎样摆脱这个,我怎样才能得到保存的对象?

请帮我.

java serialization serialversionuid

8
推荐指数
1
解决办法
2598
查看次数

NetBeans是否可以为Java类生成自动串行版本ID?

我想通过生成自动序列版本ID来删除某些类的一些警告.在Eclipse中,这很简单 - IDE可以自动生成一个并将其添加到类中.但是,我在NetBeans中看不到此功能.是可用的么?如果是的话,它在哪里?如果没有,是否有可以启用它的插件?

java netbeans serialversionuid

7
推荐指数
3
解决办法
2万
查看次数

序列化的lambda和没有serialVersionUID?

我正在尝试学习序列化如何与Java及其最新版本一起使用.我正在尝试序列化这样的lambda:

Runnable r = (Runnable & Serializable)() -> {System.out.println("This is a test");};
Run Code Online (Sandbox Code Playgroud)

但我注意到我没有关于缺少serialVersionUID变量的警告.这是正常的吗?

我知道它将在运行时生成,但强烈建议您定义它:https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html

如果可序列化类未显式声明serialVersionUID,则序列化运行时将基于类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述.但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而异,因此在反序列化期间可能导致意外的InvalidClassExceptions.因此,为了保证跨不同java编译器实现的一致的serialVersionUID值,可序列化类必须声明显式的serialVersionUID值.强烈建议显式serialVersionUID声明尽可能使用private修饰符,因为此类声明仅适用于立即声明的类 - serialVersionUID字段作为继承成员无用.数组类不能声明显式的serialVersionUID,因此它们始终具有默认的计算值,但是对于数组类,不需要匹配serialVersionUID值.

我该怎么办 ?如何在Lambda中定义它?

谢谢

java lambda serialization serialversionuid java-8

6
推荐指数
1
解决办法
764
查看次数

生成serialVersionID而不是1L,2L的好处,

我与一位同事讨论了可序列化类的serialVersionUID:他总是从a开始,serialVersionUID = 1L然后在对类进行一些重大更改时将其递增1.

JDK类似乎总是在类中使用更复杂的生成的serialVersionUID java.lang.String:

private static final long serialVersionUID = -6849794470754667710L;
Run Code Online (Sandbox Code Playgroud)

现在,我的同事询问这种serialVersionUID与简单的serialVersionUID(如1L,2L,3L ......)相比的优势?

我们还搜索了SOF,但对给出的答案不是很满意,例如在为什么生成long serialVersionUID而不是简单的1L?.

在我看来,使用生成的ID的优点是它不需要任何有关"旧"类版本的信息.但是当手动递增ID时,您必须知道到目前为止的最高值.这可能听起来微不足道(通过查看当前的serialVersionUID并将其增加1),但在更大的软件项目,更大的开发团队或分布式环境中可能更复杂.

java serialization serialversionuid

6
推荐指数
1
解决办法
266
查看次数

Java中默认和生成的串行版本uid之间有什么区别?

我不知道在Java中在哪里使用默认的serialVersionUID或生成的serialVersionUID

private static final long serialVersionUID = 4125965356358329466L; // generated
private static final long serialVersionUID = 1L; // default
Run Code Online (Sandbox Code Playgroud)

java serialization serialversionuid deserialization

6
推荐指数
2
解决办法
4236
查看次数

使用maven2插件自动生成串行版uid

是否有maven插件自动计算和更新实现Serializable接口的所有java类文件的串行版本uid?

java maven-2 serialversionuid maven-plugin

5
推荐指数
1
解决办法
2997
查看次数

eclipse使用什么算法在Serializable类中生成版本ID?

假设这是我的课:

class B implements Serializable {

    private static final long serialVersionUID = -5186261241138469827L; // what algo is used to generate this
     ..........
}
Run Code Online (Sandbox Code Playgroud)

eclipse使用什么算法生成serialVersionUID = -5186261241138469827L

java eclipse serialversionuid

5
推荐指数
1
解决办法
446
查看次数

为什么我们在扩展 RuntimeException 时需要 serialVersionUID?

为什么我们在扩展 RuntimeException 时需要 serialVersionUID?RuntimeException 是一个可序列化的类吗?

public class DataNotFoundException extends RuntimeException {       
    /**
     * 
     */
    private static final long serialVersionUID = 1;

    public DataNotFoundException(String str)
    {
        super(str);
    }
}
Run Code Online (Sandbox Code Playgroud)

java serialization serialversionuid runtimeexception

5
推荐指数
2
解决办法
3473
查看次数

添加方法会改变我的类中的java计算的serialVersionUid吗?

如果我有这样的课程:

public class Name implements Serializable {
    private final String firstName;
    private final String lastName;

    public Name(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我添加另一个方法(并没有其他字段),它的计算的serialVersionUID会改变吗?

例如,添加方法:

public String getFullName() {
    return firstName + " " + lastName;
}
Run Code Online (Sandbox Code Playgroud)

或者,是否有一个很好的工具来解决这个问题?

java serialization serializable serialversionuid

4
推荐指数
1
解决办法
2273
查看次数