gpt4 book ai didi

java - 你如何序列化 Guava 集合?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:17 24 4
gpt4 key购买 nike

我肯定遗漏了一些明显的东西,但我无法设法序列化 TreeBasedTable。它被标记为 @GwtCompatible(serializable = true),所以我的理解是我需要使用 guava-gwt 库来(反)序列化它。

但我找不到那样做。一个人为的代码示例将不胜感激。

有关信息,我的 pom 包含 guavaguava-gwt,均为 14.0 版本。

编辑

多亏了这个答案,我现在明白了 TreeBasedTable 是可序列化的。所以我删除了所有 gwt 引用并让它工作。但是,此代码仍然失败(这是让我认为 TreeBasedTable 不可序列化的代码) - 所以我猜问题出在自定义比较器上......

public static void main(String[] args) throws Exception {
//with the following table it works
//Table<Integer, String, Object> table = TreeBasedTable.create();

//but with this one, it fails
Table<Integer, String, Object> table = TreeBasedTable.create(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}, String.CASE_INSENSITIVE_ORDER);

table.put(1, "s", 123);

try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Paths.get("c:/temp/test").
toFile()));) {
oos.writeObject(table);
}

Table<Integer, String, Object> saved = null;

try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Paths.get("c:/temp/test").
toFile()));) {
saved = (Table<Integer, String, Object>) ois.readObject();
}

System.out.println(table.equals(saved));
Files.delete(Paths.get("C:/temp/test"));
}

最佳答案

如果您谈论的是纯 Java 序列化,是的:TreeBasedTableSerializable

TreeBasedTable 扩展了 StandardRowSortedTable,后者扩展了 StandardTable,后者实现了 Serializable

顺便说一句:一个简单的检查会帮助你:

Serializable foo = TreeBasedTable.create();

由于编译器不会提示这一行,您知道 TreeBasedTable 实现了 Serializable


更新:

String.CASE_INSENSITIVE_ORDER 实现了 Serializable,因此您需要做的就是将匿名 Integer 比较器重构为实现 Serializable 的内部类.或者:更好的是,使用 Ordering.natural()相反,它已经是 Serializable 了。

关于java - 你如何序列化 Guava 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15351587/

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