发送 ArrayList的最佳方式在Java中通过TCP?

发布于 2024-08-16 19:18:30 字数 170 浏览 4 评论 0原文

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

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

非常感谢!

I'm writing a client/server application in Java and I'm using TCP to transfer data which I'm storing in an ArrayList (i.e. An ArrayList of arrays of Strings).

What is the best way to transfer that data from one to the other? Should I make one long string and use a PrintWriter's println() or is there a better way?

Thanks very much!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

够运 2024-08-23 19:18:30

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

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

同样,在接收端使用 ObjectInputStream

只要列表中的所有内容都实现 java.io.Serialized,就应该可以正常工作。

Assuming both client and server and written in Java, and assuming you're stick with raw sockets, rather than a higher-level remoting framework:

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

Similarly, use ObjectInputStream at the receiving end.

Should work nicely, as long as everything inside the list implements java.io.Serializable.

落花随流水 2024-08-23 19:18:30

对斯卡夫曼的回答添加一点:

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();

To add a bit to skaffman's answer:

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

And on the client:

InputStream socketStream = ...
ObjectInputStream objectInput = new ObjectInputStream(new GZIPInputStream(socketStream));
ArrayList<type> a = objectInput.readObject();
玻璃人 2024-08-23 19:18:30

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

You might want to consider the JSON framework. See json.org JSON = Javascript Object Notation. Even though the name suggests the use of Javascript, the json.jar is a good serialization/deserialization tool.

衣神在巴黎 2024-08-23 19:18:30

许多人会为此使用 Web 服务框架,例如 Apache CXF。您还可以向下一层使用 JAXB 或 XML Bean。

Many people would use a web service framework for this, such as Apache CXF. You could also go one level down to JAXB or XML Beans.

书间行客 2024-08-23 19:18:30

您可能需要研究序列化。不过,您可以为这种简单的情况编写自己的格式。我个人更喜欢 bencoding。不过,这里最省力(也最不容易出错)的解决方案是序列化。

You may want to look into Serialization. You could just make up your own format for such a simple case, though. Personally I favour bencoding. The minimum effort (and least bug-prone) solution here is Serialization, though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文