2012-12-11 40 views
1

我們有這個目標,需要整個插座送我送的ObjectOutputStream和ObjectIntputStream之間的序列化對象中的數組。可以用插座

Socket _socket; 

一側

ObjectOutputStream out = new ObjectOutputStream(_socket.getOutputStream()); 
    Msg senMsg = new Msg(3,"Fine", new boolean[]{true,true,true}) 
     out.writeObject(senMsg); 

...................在另一側

ObjectInputStream in = new ObjectInputStream(_socket.getInputStream()); 
     Msg recMsg = (Msg) in.readObject(); 
    boolean[] s = recMsg.getsign(); 
    System.out.println(s[0]+", "+ s[1]", "+s[2]); 

爲什麼輸出是:假,假,假。

如何從ObjectInputStream中檢索數組的值;

+1

我只能猜測'Myarraycopy'方法裏面發生了一些奇怪的事情 –

+0

您使用的是布爾[]還是布爾[]',因爲它們不是同一類型? –

+0

你的類叫'Msg'(在類中)還是'Message'(在構造函數中)? –

回答

3

我懷疑你的代碼看起來並不像它的例子

此示例按預期工作(和編譯)

static class Msg implements Serializable { 
    final int num; 
    final String name; 
    final boolean[] sign; 

    Msg(int num, String name, boolean[] sign) { 
     this.num = num; 
     this.name = name; 
     this.sign = sign; 
    } 

    @Override 
    public String toString() { 
     return "Msg{" + 
       "num=" + num + 
       ", name='" + name + '\'' + 
       ", sign=" + Arrays.toString(sign) + 
       '}'; 
    } 

    // Some methods 
} 
public static void main(String... args) throws IOException, ClassNotFoundException { 
    ByteArrayOutputStream boas = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(boas); 
    oos.writeObject(new Msg(3, "Fine", new boolean[] { true, true, true })); 
    oos.close(); 

    ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(boas.toByteArray())); 
    Msg msg = (Msg) ois.readObject(); 
    System.out.println(msg); 
} 

打印

Msg{num=3, name='Fine', sign=[true, true, true]} 
+0

非常感謝彼得,是的,我的代碼有點不一樣,實際上,我改變了它後,它不以這種方式與我一起工作,但後來決定問這裏 但是,我有另一個問題,如果這個工程爲什麼它必須使用ByteArrayOutputStream? 關於。 –

+0

ByteArrayOutputStream()&ByteArrayIntputStream()如何與Socket一起使用? –

+0

我使用ByteArrayInput/OutputStream,因爲在本例中沒有套接字。如果您有套接字,請使用套接字提供的Input/OutputStream。 –

0

不管「Myarraycopy做( )'的確如此,你可以把它移除,因爲你用兩個相同的值來調用它。因此它不可能做任何有用的事情。將數組複製到自身並沒有用處,顯然這是錯誤的。

+0

Myarray不是問題。我可能會刪除它,或者沒有任何變化。 –

+0

您發佈的代碼也不是問題。有用。 – EJP

+0

你有沒有測試過。該數組只到達默認值其他值沒關係。 –