Serializable trong Socket?

Chào mọi người.
Hiện tại mình đang làm game bài ba cây bằng Java Socket. Trường hợp lỗi của mình như sau:

Mình sẽ gửi một đối tượng từ client 1 lên Server. Server sẽ nhận đối tượng và cập nhật một số giá trị trong đối tượng đấy:

class Server{
    ObjectInputStream ois;
    Data data = (Data) ois.readObject();
    // Ví dụ thuộc tính  ( songuyen = 1 )
    //Cập nhật dữ liệu 
     data.songuyen = 2;
    //Gửi đối tượng data cho Client 2
}

Ở phía client 2 mình nhận đối tượng data từ Server gửi đến. Lỗi ở đây là những giá trị mình cập nhật ở trên Server đều không thành công, nghĩa là ở client 2 mình vẫn nhận được songuyen = 1. Không biết lỗi này có phải do Serializable không nhỉ ? Cảm ơn mọi người đã giúp đỡ.

Mình tìm được câu trả lời rồi. ObjectOutputStream có cơ chế là sẽ có 1 bộ nhớ cache để lưu các đối tượng đã truyền đi. Khi một đối tượng được truyền đi lần thứ 2 trên ObjectOutputStream đó thì cache sẽ lấy ra đối tượng đã lưu trong ObjectOutputStream nên nhưng giá trị update mới cho đối tượng đó sẽ không thành công.

Giải quyết bằng cách gọi ObjectOutputStream.reset() sau khi gửi 1 đối tượng đi.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?