番石榴 - 可以序列化多图吗?

时间:2012-12-13 15:58:25

标签: serialization guava multimap

我正在查看实现Serializable接口的API ArrayListMultiMap。这是否意味着我可以序列化这个对象?是否所有Multimap对象都已序列化?

2 个答案:

答案 0 :(得分:8)

Serializable的含义始终相同:如果对象不可序列化,则无法序列化。如果是,它可能工作与否......特别是在集合(包括地图和多图)的情况下,它取决于它们的内容。

例如,您可以确定序列化ArrayList<String>,因为ArrayList.class是可序列化的,因此列表中的每个成员都是如此。尝试序列化ArrayList<Object>的OTOH可能会或可能不会起作用:如果所有包含的对象都是例如字符串,它会工作。如果任何成员不可序列化,您将获得例外。

  

这是否意味着我可以序列化这个对象?

如果所有键和值都是可序列化的,则可以。

  

所有multiMap对象都可以序列化吗?

不,接口Multimap不扩展Serializable,因此可能存在非可序列化的实现。实际上,你可以通过例如Multimaps.filterEntries

答案 1 :(得分:0)

public CipherParameters getParameters() { if (!isInitialized()) { CryptoException.throwIt(CryptoException.UNINITIALIZED_KEY); } // modulus = p * q; return new RSAPrivateCrtKeyParameters(p.getBigInteger().multiply(q.getBigInteger()), null, null, p.getBigInteger(), q.getBigInteger(), dp1.getBigInteger(), dq1.getBigInteger(), pq.getBigInteger()); } ArrayListMultimapHashMultimapSerializable次观看(例如Collection次)不是。

setModulus() call已解答此问题:

要使用asMap()返回的地图,您可以重新创建新地图并将Multimap asMap()视图包装到其他集合中(例如Collection),这将使新地图Set

Serializable

或符合java 7的代码:

Multimap<MyClass, MyOtherClass> myMultiMap = HashMultimap.create();
// ... build your multimap
Map<MyClass, Set<MyOtherClass>> map = myMultiMap.asMap().entrySet()
    .stream()
    .collect(Collectors.toMap( 
        Map.Entry::getKey, 
        (entry) -> ImmutableSet.copyOf(entry.getValue()) 
    ));