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



我想通过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同步相关的问题。但如何让它发挥作用呢?

  1. ArrayList未同步。向量。

  2. 对于流,你需要字段是可序列化的,而不是同步的。尝试通过"transient"打开不同的字段,这样,您就会发现问题所在。

我的技巧是:

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

该解决方案还允许客户端网站动态更新球员列表,这是更流畅的

相关内容

  • 没有找到相关文章

最新更新