gpt4 book ai didi

java - 无效类异常 : class invalid for deserialization

转载 作者:行者123 更新时间:2023-12-03 03:42:13 30 4
gpt4 key购买 nike

我在我的项目中使用 SSA 解析器库。当我使用命令提示符调用其中一个类的 main 方法时,它在我的机器上运行良好。

我从命令提示符执行以下命令:

java -Xmx800M -cp %1 edu.stanford.nlp.parser.lexparser.LexicalizedParser -retainTMPSubcategories -outputFormat "penn,typedDependenciesCollapsed"   englishPCFG.ser.gz %2

但是当我尝试在 java 程序中使用相同的类时,我得到 Caused by: java.io.InvalidClassException: edu.stanford.nlp.stats.Counter; edu.stanford.nlp.stats.Counter;类对于反序列化无效异常。

以下行抛出错误:

LexicalizedParser _parser = new LexicalizedParser("C:\englishPCFG.ser.gz");

englishPCFG.ser.gz 文件包含一些在创建 LexicalizedParser 类型的对象时加载的类或信息。

以下是堆栈跟踪:

Loading parser from serialized file C:\englishPCFG.ser.gz ...
Exception in thread "main" java.lang.RuntimeException: Invalid class in file: C:\englishPCFG.ser.gz
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserDataFromSerializedFile(LexicalizedParser.java:822)
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserDataFromFile(LexicalizedParser.java:603)
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.<init>(LexicalizedParser.java:168)
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.<init>(LexicalizedParser.java:154)
at com.tcs.srl.ssa.SSAInvoker.<init>(SSAInvoker.java:21)
at com.tcs.srl.ssa.SSAInvoker.main(SSAInvoker.java:53)
Caused by: java.io.InvalidClassException: edu.stanford.nlp.stats.Counter; edu.stanford.nlp.stats.Counter; class invalid for deserialization
at java.io.ObjectStreamClass.checkDeserialize(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserDataFromSerializedFile(LexicalizedParser.java:814)
... 5 more
Caused by: java.io.InvalidClassException: edu.stanford.nlp.stats.Counter; class invalid for deserialization
at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
... 17 more

我是 Java 世界的新手,所以我不知道为什么会出现此错误以及我应该如何避免它。

我用谷歌搜索了这个错误,然后我发现这个错误是由于某些版本不匹配而导致的,我认为这与 Windows API 的 dll hell 类似。我对么?

谁知道为什么会出现这种错误?我们应该怎样做才能避免这种情况?

请赐教!!!

最佳答案

这可能是因为该类的serialVersionUID已更改,并且您正在尝试读取使用该类的另一个版本编写的对象。

您可以通过在可序列化类中声明serialVersionUID来强制使用版本号:

private static final long serialVersionUID = 1L;

关于java - 无效类异常 : class invalid for deserialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703225/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com