通过网络流发送包含Collection的类

时间:2011-11-17 22:30:04

标签: java android stream synchronization

我想通过ObjectStream发送一个类的对象:(数据包是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同步有关。但是如何让它发挥作用?

2 个答案:

答案 0 :(得分:0)

  1. ArrayList未同步。矢量是。

  2. 对于流媒体,您需要字段可序列化,而不是同步。尝试通过“瞬态”打开不同的字段,因此,您会发现问题。

答案 1 :(得分:0)

我的诀窍是:

  1. 发送初始数据包ServerPlayersListInitPacket
  2. 循环发送ServerNextPlayerPacket,每个Player
  3. 一个Packet

    此解决方案还允许客户端站点动态更新播放器列表,这更加顺畅。