【发布时间】:2010-12-31 21:03:16
【问题描述】:
我正在用 Java 编写客户端/服务器应用程序,并使用 TCP 传输存储在 ArrayList 中的数据(即字符串数组的 ArrayList)。
将数据从一个传输到另一个的最佳方式是什么?我应该制作一个长字符串并使用 PrintWriter 的 println() 还是有更好的方法?
非常感谢!
【问题讨论】:
标签: java networking tcp client
我正在用 Java 编写客户端/服务器应用程序,并使用 TCP 传输存储在 ArrayList 中的数据(即字符串数组的 ArrayList)。
将数据从一个传输到另一个的最佳方式是什么?我应该制作一个长字符串并使用 PrintWriter 的 println() 还是有更好的方法?
非常感谢!
【问题讨论】:
标签: java networking tcp client
假设客户端和服务器都使用 Java 编写,并假设您坚持使用原始套接字,而不是更高级别的远程处理框架:
OutputStream socketStream = ...
ObjectOutput objectOutput = new ObjectOutputStream(socketStream);
objectOutput.writeObject(myDataList);
同样,在接收端使用ObjectInputStream。
应该可以很好地工作,只要列表中的所有内容都实现java.io.Serializable。
【讨论】:
为 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();
【讨论】:
您可能需要考虑 JSON 框架。请参阅json.orgJSON = Javascript Object Notation。尽管名称暗示使用 Javascript,但 json.jar 是一个很好的序列化/反序列化工具。
【讨论】:
很多人会为此使用 Web 服务框架,例如 Apache CXF。您还可以再降一级到 JAXB 或 XML Beans。
【讨论】:
您可能想查看Serialization。不过,您可以为这样一个简单的案例编写自己的格式。我个人喜欢bencoding。不过,这里最省力(也是最不容易出错)的解决方案是序列化。
【讨论】: