发送阵列列表的最佳方式<;字符串[]>;Java中的TCP协议?

发送阵列列表的最佳方式<;字符串[]>;Java中的TCP协议?,java,networking,tcp,client,Java,Networking,Tcp,Client,我正在用Java编写一个客户机/服务器应用程序,并使用TCP传输存储在ArrayList(即字符串数组的ArrayList)中的数据 将数据从一个传输到另一个的最佳方式是什么?我应该制作一个长字符串并使用PrintWriter的println()还是有更好的方法 非常感谢 许多人会为此使用web服务框架,例如。您还可以深入到JAXB或XML bean的一个层次。假设客户机和服务器都是用Java编写的,并且假设您坚持使用原始套接字,而不是更高层次的远程处理框架: OutputStream sock

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

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


非常感谢

许多人会为此使用web服务框架,例如。您还可以深入到JAXB或XML bean的一个层次。

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

OutputStream socketStream = ... 
ObjectOutput objectOutput = new ObjectOutputStream(socketStream);
objectOutput.writeObject(myDataList);
同样,在接收端使用
ObjectInputStream


应该很好地工作,只要列表中的所有内容都实现了<代码> java .IO .SerialEdabult

,您可能需要考虑JSON框架。请参见

JSON=Javascript对象表示法
。尽管名称暗示使用Javascript,但json.jar是一个很好的序列化/反序列化工具。

您可能需要研究一下。不过,对于这样一个简单的案例,您可以自己编写格式。我个人赞成。不过,这里最省力(也最不容易出现错误)的解决方案是序列化。

要补充一下斯卡夫曼的答案:

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();
InputStream socketStream=。。。
ObjectInputStream objectInput=新的ObjectInputStream(新的GZIPInputStream(socketStream));
ArrayList a=objectInput.readObject();

+1肯定是Java客户机/服务器解决方案的首选谢谢,我会关注这一点,非常感谢!谢谢,我会研究它们的!啊,有趣,我来看看:)啊,我以前在Javascript中使用过JSON,可能是个不错的选择,谢谢!不过,我会避免使用GZIP之类的东西,除非你在一个低带宽的网络上,而且你需要消耗CPU周期。