【问题标题】:Java Socket Programming: Send Object as CSV or Serialized Object?Java Socket 编程:将对象作为 CSV 或序列化对象发送?
【发布时间】:2014-10-05 15:25:38
【问题描述】:

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

通过 PrintWriter 以 CSV 格式发送数据与通过 ObjectOutputStream 以对象中的字段形式发送数据的优缺点是什么?

【问题讨论】:

    标签: java sockets csv network-programming objectoutputstream


    【解决方案1】:

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

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

    使用序列化,客户端和服务器必须用 Java 编写,并且在其类路径中具有序列化对象的类。如果您打算让客户使用任何语言编写,则不应考虑。

    如果序列化没问题,那么将几乎所有 Java 对象转换为字节当然是一种非常简单的方法,这样您就可以避免定义格式。

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

    【讨论】:

      【解决方案2】:

      我认为 CSV 更小。

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

      我不以其他原因向您推荐 ObjectOutputStream。

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

      您是否研究过 serialize 和 serialVersionUID?

      请查看java.io.Serializable

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-30
        • 1970-01-01
        • 1970-01-01
        • 2017-12-28
        • 2012-06-19
        • 1970-01-01
        • 2011-09-11
        相关资源
        最近更新 更多