所以我有这个课程:
public class Message implements Serializable{
private static final long serialVersionUID = 1L;
private Location click;
private String conection;
private transient ArrayList<Location> allLocations = new ArrayList<Location>();
private transient ArrayList<Snake> allSnakes = new ArrayList<Snake>();
private transient ArrayList<Location> allObstacles = new ArrayList<Location>();
private transient ArrayList<Location> allPowerups = new ArrayList<Location>();
private boolean isConnecting;
........
}
我需要通过一个有效的ObjectStream发送它。 不幸的是,那种类型的数组列表是不可序列化的,因此我将“瞬态”列为“瞬态”。之前的关键字。 使用.readObject()反序列化时,所有列表都为null。 所以我的问题是,客户端/服务器如何相互发送这些列表?
答案 0 :(得分:1)
所以我的问题是,客户端/服务器如何相互发送这些列表?
好吧,通过将这些属性标记为transient
,您隐式告知 ObjectOutputStream
不发送它们。
如果您需要发送它们:
删除transient
修饰符,然后将Location
和Snake
类更改为可序列化,或者
编写自定义readObject
和writeObject
方法以手动序列化和反序列化这些列表&#34;
使这些类序列化可以像将implements Serializable
添加到相应的类声明一样简单。
答案 1 :(得分:0)
ArrayList是Serializable。
似乎位置或 Snake 不是。因此,只需将它们序列化并删除瞬态。
答案 2 :(得分:0)
瞬态意味着您不希望序列化该属性。但在你的情况下,你似乎错了。 ArrayList是可序列化的,但是为了序列化整个列表,它的所有元素也将被序列化。因此,请确保您在List中放置的是可执行序列化的。