2012-11-05 92 views
-1

我有一個奇怪的問題發送一個我通過套接字創建的可序列化的對象。事實上,如果我在同一臺機器上運行服務器和客戶端,它的運行狀況良好,但如果服務器和客戶端在不同的機器上,則服務器端的重新對象爲空(大小等於零)通過套接字發送一個可序列化的對象

任何一個有一個想法來解決這個問題? (代碼是波紋管)

服務器:

public static void main() { 
... 
InputStream is = mysocket.getInputStream(); 
ObjectInputStream ois = new ObjectInputStream(is); 

ArrayList<MyObject> list_of_object; 
list_of_object = (ArrayList<MyObject>) ois.readObject(); 
logger.log(Level.INFO,"object readen with size : "+list_of_object.size()); 
... 
} 

客戶:

public static void main() { 
... 
ObjectOutputStream oos = new ObjectOutputStream(mysocket.getOutputStream()); 
oos.writeObject(list_of_object); 
... 
} 
+0

對象中的'size()'方法是做什麼的? 「你的意思是」服務器端的readen對象是空的(大小等於零)「?你應該更多的細節和解釋。 –

+0

我的對象是ArrayList,所以它是ArrayList對象的大小方法(返回列表中的元素數) – user1027336

+0

如果您正在編寫/讀取ArrayList,那麼您爲什麼要將讀取的對象轉換爲MyObject。 –

回答

0

試試下面的測試案例與您的MyObject -class的版本。它會幫助你找出問題所在。如果這對你的班級適用,那麼它可能是網絡層,例如你正在閱讀與你期望閱讀的東西不同的東西。常見的錯誤可能是您在某處運行舊版本的服務器代碼,並且您確實可能讀取了MyObjects的空列表。

import static org.junit.Assert.assertEquals; 

import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.ArrayList; 

import org.junit.Test; 

public class StreamTest { 

public static class MyObject implements Serializable { 

} 

@Test 
public void test() throws Exception { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(baos); 
    ArrayList<MyObject> list_of_object = new ArrayList<MyObject>(); 
    list_of_object.add(new MyObject()); 
    oos.writeObject(list_of_object); 

    byte[] whatGoesOverWire = baos.toByteArray(); 
    ByteArrayInputStream bais = new ByteArrayInputStream(whatGoesOverWire); 
    ObjectInputStream ois = new ObjectInputStream(bais); 
    ArrayList<MyObject> deserialized = (ArrayList<MyObject>) ois 
      .readObject(); 
    assertEquals(1, list_of_object.size()); 
    assertEquals(1, deserialized.size()); 
} 

} 
相關問題