我想通过ObjectStream发送一个类的对象:(Packet is Serializable
)
public class ServerPlayersListPacket extends Packet {
private static final long serialVersionUID = -7141960214853425631L;
private ArrayList<Player> players;
public ServerPlayersListPacket(ArrayList<Player> players) {
this.setPlayers(players);
}
public ArrayList<Player> getPlayers() {
return new ArrayList<Player>(Collections.synchronizedList(players));
}
public void setPlayers(ArrayList<Player> players) {
this.players = players;
}
}
但是ArrayList
有一个问题。而收到它从其他网站我得到了OptionalDataException
。
我发现这是与ArrayList
同步相关的问题。但如何让它发挥作用呢?
-
ArrayList未同步。向量。
-
对于流,你需要字段是可序列化的,而不是同步的。尝试通过"transient"打开不同的字段,这样,您就会发现问题所在。
我的技巧是:
- 发送初始数据包
ServerPlayersListInitPacket
- 发送
ServerNextPlayerPacket
,每个Packet
有一个Player
该解决方案还允许客户端网站动态更新球员列表,这是更流畅的