[英]socket programming serialized objects
我在我的代碼中遇到一種非常奇怪的情況,我不明白我正在通過套接字發送對象讓我說O,然后我更改了對象中變量的值並再次發送,但是第二次在我打印時在客戶端,我得到的值與第一個對象相同。
客戶代碼:
while(true){
try{
order=(Order)ois.readObject();
System.out.println(order);
}
服務器代碼:
public void sendOrder(Order o){
try {
out.writeObject(o);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
主要方法:
Server_Socket ss=new Server_Socket();
ss.sendOrder(o);
o.add(r2);
ss.sendOrder(o);
在發送之前,該值肯定在服務器端發生了變化,但是我不明白為什么在客戶端中它未顯示r2添加到對象中。
對象由ObjectOutputStream
緩存。 為防止這種情況,請在每次寫入后調用ObjectOutputStream.reset()
。 如果要發送不包含其他對象的簡單對象,請使用writeUnshared()
而不是writeObject()
。
IOStreams正在緩存對象。 要解決此問題,請在服務器上創建深克隆,然后再將對象發回。 當客戶端從流中提取對象時,它將具有不同的實例ID,並且實際上將在客戶端反序列化和實例化對象。
好玩的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.