1

我们有这个对象,需要通过套接字发送:

static class Msg implements Serializable {
 int num;
 String name;
 boolean [] sign; 
 //modify 'Message' to 'Msg'....
 public Msg( int num, String name,boolean[] sign) {
   super();
   this.num=num;
   this.name=name;
   this.sign=sign; 
    Myarraycopy(this.sign,sign);
  }
 public boolean[] getsign() {
  return sign
 }
 // Some methods
}

但是在代码的其他部分。

  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 中检索数组的值;

4

2 回答 2

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]}
于 2012-12-11T14:48:22.860 回答
0

无论 'Myarraycopy()' 做什么,您都可以删除它,因为您使用两个相同的值调用它。因此它不可能做任何有用的事情。将数组复制到自身并没有用,而且显然这样做是错误的。

于 2012-12-11T21:45:01.543 回答