簡體   English   中英

套接字編程序列化對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM