Java套接字编程:将对象作为CSV或序列化对象发送?

时间:2014-10-05 04:25:10

标签: java sockets csv network-programming objectoutputstream

我刚刚使用Java中的套接字编写网络代码。我正在制作一些测试程序。最初我打算以逗号分隔值发送数据,但我最近发现了ObjectOutputStream。哪种方法更快或带宽效率更高?例如,如果我制作一个我必须经常发送x和y坐标的游戏,我应该通过Printmariter以逗号分隔,还是制作Position类并通过ObjectOutputStream发送实例。如果我更改代码并需要发送更多数据怎么办?

通过PrintWriter将数据作为CSV发送到ObjectOutputStream上的对象中的字段有哪些优缺点?

2 个答案:

答案 0 :(得分:2)

ad-hoc二进制格式很有可能比默认的序列化格式更具带宽效率,这应该是(但它是一个疯狂的猜测,它取决于数据的性质和数量:你应该衡量,如果重要的话)或多或少的带宽效率比基于文本的格式。

但带宽效率并不是唯一重要的事情。

使用序列化,客户端和服务器必须用Java编写,并在类路径中包含序列化对象的类。如果您打算用任何语言撰写客户,您都不应该考虑它。

如果序列化没问题,它当然是将几乎任何Java对象转换为字节的一种非常简单的方法,它允许您避免定义格式。

请注意,有些替代方案可提供几乎相同的灵活性,但不具备序列化的Java唯一缺点。例如,JSON,XML或protobuf

答案 1 :(得分:0)

我认为CSV更小。

如果要检查数据大小,请尝试输出到文件。

我不会因为其他原因向你推荐ObjectOutputStream。

因为您必须保持对象的兼容性。

您是否研究过serialize和serialVersionUID?

请检查java.io.Serializable