我在通过套接字连接以两个不同的包将作业(整数数组)从客户端发送到服务器时遇到问题。请问有什么想法吗?
如果我的问题不够清楚,我可以进一步解释。
要回答您标题中的问题,我会将 a 包装SocketOutputStream
在 aBufferedOutputStream
中并重复DataOutputStream
使用后者的方法。writeInt()
或者您可以使用ObjectOutputStream
代替DataOutputStream
,并序列化数组:objOutStream.writeObject(theArray)
。要在另一端再次读取它,只需将SocketInputStream
in (1) a包装DataInputStream
并readInt()
重复使用,或 (2) aObjectInputStream
并使用readObject()
。
(如果您不必与其他语言互操作,Object*Stream
对您来说更容易)
您必须将其作为数组发送吗?它使整个过程复杂化。为什么不将它包装在一个集合或某种列表中?IE:
ObjectOutputStream oos = new ObjectOutputStream(...);
oos.writeObject(integerCollection);
ObjectInputStream ois = new ObjectInputStream(...);
Collection integerCollection = (Collection)ois.readObject();
您使用什么协议通过您的链接发送这些数据?您可以将数组包装在可以序列化为输出流的对象中。
TCP:在这种情况下,事情应该很简单。传输层将负责分割您的对象并在链接的另一端正确处理它。
UDP:事情会变得有点复杂;如果您尝试序列化的对象大于 UDP 缓冲区(以字节计),那么您可能无法获取数据。在这种情况下,您可以以小于默认 UDP 缓冲区大小的块发送数据。
问候,
使用
ArrayList a=new ArrayList(n) //n represents size
或者
List a=new List()
我们可以发送到服务器