【问题标题】:Best way to send an ArrayList<String[]> over TCP in Java?在 Java 中通过 TCP 发送 ArrayList<String[]> 的最佳方式?
【发布时间】:2010-12-31 21:03:16
【问题描述】:

我正在用 Java 编写客户端/服务器应用程序,并使用 TCP 传输存储在 ArrayList 中的数据(即字符串数组的 ArrayList)。

将数据从一个传输到另一个的最佳方式是什么?我应该制作一个长字符串并使用 PrintWriter 的 println() 还是有更好的方法?

非常感谢!

【问题讨论】:

    标签: java networking tcp client


    【解决方案1】:

    假设客户端和服务器都使用 Java 编写,并假设您坚持使用原始套接字,而不是更高级别的远程处理框架:

    OutputStream socketStream = ... 
    ObjectOutput objectOutput = new ObjectOutputStream(socketStream);
    objectOutput.writeObject(myDataList);
    

    同样,在接收端使用ObjectInputStream

    应该可以很好地工作,只要列表中的所有内容都实现java.io.Serializable

    【讨论】:

    • +1 无疑是 Java 客户端/服务器解决方案的首选选择
    • 谢谢,我会调查的,非常感谢!
    【解决方案2】:

    为 skaffman 的回答添加一点内容:

    OutputStream socketStream = ... 
    GZIPOutputStream objectOutput = new GZIPOutputStream(new ObjectOutputStream(socketStream));
    objectOutput.writeObject(myDataList);
    

    在客户端:

    InputStream socketStream = ...
    ObjectInputStream objectInput = new ObjectInputStream(new GZIPInputStream(socketStream));
    ArrayList<type> a = objectInput.readObject();
    

    【讨论】:

    • 不过,我会避免使用 GZIP,除非您使用的是低带宽网络并且需要消耗 CPU 周期。
    【解决方案3】:

    您可能需要考虑 JSON 框架。请参阅json.orgJSON = Javascript Object Notation。尽管名称暗示使用 Javascript,但 json.jar 是一个很好的序列化/反序列化工具。

    【讨论】:

    • 啊,我以前用过JSON和Javascript,可能是个不错的选择,谢谢!
    【解决方案4】:

    很多人会为此使用 Web 服务框架,例如 Apache CXF。您还可以再降一级到 JAXB 或 XML Beans。

    【讨论】:

    • 有意思,我去看看:)
    【解决方案5】:

    您可能想查看Serialization。不过,您可以为这样一个简单的案例编写自己的格式。我个人喜欢bencoding。不过,这里最省力(也是最不容易出错)的解决方案是序列化。

    【讨论】:

    • 谢谢,我会研究他们两个!
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多