我刚刚使用Java中的套接字编写网络代码。我正在制作一些测试程序。最初我打算以逗号分隔值发送数据,但我最近发现了ObjectOutputStream。哪种方法更快或带宽效率更高?例如,如果我制作一个我必须经常发送x和y坐标的游戏,我应该通过Printmariter以逗号分隔,还是制作Position类并通过ObjectOutputStream发送实例。如果我更改代码并需要发送更多数据怎么办?
通过PrintWriter将数据作为CSV发送到ObjectOutputStream上的对象中的字段有哪些优缺点?
答案 0 :(得分:2)
ad-hoc二进制格式很有可能比默认的序列化格式更具带宽效率,这应该是(但它是一个疯狂的猜测,它取决于数据的性质和数量:你应该衡量,如果重要的话)或多或少的带宽效率比基于文本的格式。
但带宽效率并不是唯一重要的事情。
使用序列化,客户端和服务器必须用Java编写,并在类路径中包含序列化对象的类。如果您打算用任何语言撰写客户,您都不应该考虑它。
如果序列化没问题,它当然是将几乎任何Java对象转换为字节的一种非常简单的方法,它允许您避免定义格式。
请注意,有些替代方案可提供几乎相同的灵活性,但不具备序列化的Java唯一缺点。例如,JSON,XML或protobuf。
答案 1 :(得分:0)
我认为CSV更小。
如果要检查数据大小,请尝试输出到文件。
我不会因为其他原因向你推荐ObjectOutputStream。
因为您必须保持对象的兼容性。
您是否研究过serialize和serialVersionUID?