gpt4 book ai didi

java - guava hashbimap 是可序列化的吗?

转载 作者:太空宇宙 更新时间:2023-11-04 07:22:29 24 4
gpt4 key购买 nike

我正在运行 guava-14.0.1 并且有以下代码:

public class LinearClsMalletAdaptor extends Classifier implements Serializable{
private BiMap<Double, String> indexToLabel;
.........

classifier = new LinearClsMalletAdaptor(sp, model, hashBiMap.inverse());

classifier 是我希望保留的对象,并且在我的 Mac 上对其进行序列化和反序列化没有任何问题。

但是,使用我发送给 friend 的同一个序列化文件,他在 Windows 机器上反序列化时遇到了以下问题:

java.lang.ClassCastException: com.google.common.collect.HashBiMap cannot be cast to 

com.google.common.collect.AbstractBiMap
at com.google.common.collect.AbstractBiMap$Inverse.readObject(AbstractBiMap.java:390)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at java.util.HashMap.readObject(HashMap.java:1030)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at sg.edu.astar.i2r.batc.projects.getme.core.classify.hier.topdown.TopDownClassificationAnnotator.initialize(TopDownClassificationAnnotator.java:63)
at

如果他在自己的机器上执行序列化,那么就不会出现这个问题。我有点困惑,HashBiMap 类可以序列化吗? API 文档说

A HashBiMap and its inverse are both serializable.

但是这个discussion这里似乎有点困惑?

最佳答案

正如 chrylis 和 Tasm 所建议的,问题是 Guava 版本之间的不匹配。 Guava 的一个版本不一定能够读取另一个版本序列化的对象。 (来源:Guava 主页,上面写着:"Serialized forms of ALL objects are subject to change. Do not persist these and assume they can be read by a future version of the library.")

您可以推断版本不同,因为 HashBiMap used to扩展 AbstractBiMapno longer确实如此。

(顺便说一句,您到 the confusing discussion 的链接令人困惑,因为它是关于 GWT 序列化的,而 GWT 序列化与普通 Java 序列化是分开的。这里不涉及它。该讨论应该比实际情况更清楚。)

关于java - guava hashbimap 是可序列化的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19091118/

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