java吧 关注:1,298,096贴子:12,834,353
  • 2回复贴,共1

【求助】Java Socket通信 关于ObjectInputStream

只看楼主收藏回复

我创建了一个serializable的类PlayerMovement,它有5个boolean类型的数据成员,然后我想通过socket通信把serverThread的movement的值传递给clientThread的movement
serverThread的代码为
while (true) {
try {
PlayerMovement sendMovement = data.getPlayerMovement(0);
System.out.print("write:");//打印sendMovement的值
sendMovement.printValue();
out.writeObject(sendMovement);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
clientThread的代码为
while (true) {
try {
PlayerMovement recMovement = (PlayerMovement) in.readObject();
gameData.setPlayerMovement(recMovement, 0);
System.out.print("read:");
recMovement.printValue();
} catch (Exception e) {
e.printStackTrace();
}
}
然后根据打印的数据,server的movement的5个boolean值是按我的设定变化的,但是client接受到的movement的5个boolean值一直都是false。这是为什么呢?
in和out是ObjectInputStream和ObjectOutputStream的对象


IP属地:广东1楼2014-04-03 12:19回复
    boolean值怎么定义的


    IP属地:河南2楼2014-04-03 14:46
    回复
      2026-02-24 20:00:48
      广告
      不感兴趣
      开通SVIP免广告
      boolean值是定义在PlayerMovement类里面的私有数据成员
      在CSDN上看到这个问题是这样解决的:
      http://java.sun.com/developer/technicalArticles/Programming/serialization/有一段:
      Caching Objects in the Stream
      ....................................
      大意是说,sendMovement写过一次后, 即使它的数据有改变, 被发送的数据还是和第一次发送时候一样的。 所以, 要new一个PlayerMovement类, 或者, 每次out.writeObject(sendMovement);后再调用 out.reset();,这样,数据就会重写。


      IP属地:广东3楼2014-04-03 17:14
      回复