【问题标题】:How can I speed up the passing of objects between two sockets using an ObjectOutputStream and the writeObject() and reset() methods?如何使用 ObjectOutputStream 以及 writeObject() 和 reset() 方法加速两个套接字之间的对象传递?
【发布时间】:2015-07-17 09:38:13
【问题描述】:

我正在编写一个应用程序(多人游戏),其中需要通过服务器将对象从应用程序的一个实例传递到另一个实例(并且非常快速)。

我正在使用通过套接字获得的ObjectOutputStreams 和ObjectInputStreams 来执行此操作。

然而,被传递对象的状态会不断更新,这意味着典型的writeObject() 方法无法解决问题(它只写入一次对象,然后在随后调用它时传递对它的引用,意味着它的实例变量的值永远不会真正更新)。

为了“修复”这个问题,我在每次调用writeObject() 之后都调用了ObjectOutputStream.reset() 方法,这确实解决了更新对象状态的问题;但是,它运行得太慢了,我认为这是每次“刷新”时对象都被完整传递的结果。

然后我的问题是,如何更新通过网络传递的对象的状态,而不必完全重写对象? (我假设这是我加快速度的方法;如果我错了,或者如果存在其他方法,请分享)提前感谢您的任何建议!

另外,关于被传递对象的大小:它不是太大...几个布尔变量、几个双精度数组和一些其他次要变量(没有长度为 1000 的列表,每个列表都包含另一个列表)。

【问题讨论】:

  • 考虑在您的下一个问题/答案中使用段落和代码符号。 ;)

标签: java performance sockets objectoutputstream


【解决方案1】:
  1. 在ObjectOutputStream 和套接字之间使用BufferedOutputStream。
  2. 在ObjectInputStream 和套接字之间使用BufferedInputStream。
  3. 在每个writeObject() 或writeUnshared(). 之后调用flush()

【讨论】:

  • 啊!非常感谢。这正是我一直在寻找的。我会尽快测试它,如果它解决了我的问题,请告诉您。
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2014-04-16
  • 2011-05-22
  • 1970-01-01
  • 2018-09-23
  • 2014-09-22
  • 2016-02-23
  • 1970-01-01
相关资源
最近更新 更多