【发布时间】:2015-08-19 22:58:36
【问题描述】:
我正在用 Java 编写一个图形化的在线程序,并使用 Kryonet 库来处理网络。
我相信这个库要求数据包是类的实例。我不确定这一点,但是没有找到任何其他建议。
我对网络和内存效率略知一二,但对这个库不是很了解,因此不确定标准方法是否有效。
我对高效数据结构的最佳猜测是将我的 Vec2 对象分解为分别代表 X 和 Y 属性的浮点数。从逻辑上讲,将这些值存储在单个浮点数组中然后作为数据包传输应该是有效的。
我不太熟悉内存管理,因为它与面向对象编程有关。由于这个“数据包”在技术上是一个实例,我猜这会使“内存安排”更类似于“C 结构”。另外,我不知道 Kryonet 是如何处理数据的,所以这都是非常理论化的。
我的问题是:将所有数据塞入单个浮点数组是否比将所有属性安排为类的单个成员更有效?或者也许是一组数组而不是一个?
提前致谢。
【问题讨论】:
-
我无法与
Kryonet通话。一般来说,数组是可变宽度的,而字段集合具有已知的字段计数。因此,当对数组进行编码时,它通常具有长度前缀(如 Pascal 字符串)或标记值(如 C 样式字符串)。根据 Kryonet 的操作方式,它可能会使用比浮点数组更少的字节来编码浮点字段的集合。此外,根据数据包的重构方式,您将拥有一个具有命名、可理解字段的对象,而不是可变大小数组中的一堆未标记元素。 -
有趣,虽然关于 C,我认为数组(和算术)比变量更有效。我同意 oop 字段有时更易于访问,具有名称。我想我最关心的是网络速度。您对此了解更多或可能有任何链接?
标签: java networking memory-management data-structures kryonet