2011-02-10 52 views
1

在Java中,所有集合都是可序列化的,但不知何故,當我想向遠程參與者發送scala集合時,總會遇到異常。它總是以例外的方式結束。重要的是,集合是可變的,隨機訪問如何序列化Scala中遠程演員的集合?

[error] [email protected]: caught java.io.NotSerializableException: scala.collection.mutable.ArraySeq 
[error] java.io.NotSerializableException: scala.collection.mutable.ArraySeq 
[error]  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180) 
[error]  at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 
[error]  at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 
[error]  at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
[error]  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 

收集嵌套到另一個類,然後通過網絡發送

@serializable 
class NetworkSendable[A]{ 
    val data = new collection.mutalbe.ArraySeq[A](10) 
} 

回答

1

他們不是系列化的,所以您可能必須將它們包裹在不同的結構中,並在抵達時拆開它們。

其他的選擇是定製你的序列化機制,但這可能容易出錯。

+0

此刻我正在使用java.util.ArrayList.asScala,因爲它的工作,但真的沒有可序列化的Scala集合?我不相信這一點,因爲通過網絡發送集合應該是一個相當普遍的任務。你認爲這些收藏不會序列化的原因是什麼? – Arne