TCP连接:接收阵列';它的大小出人意料地巨大
我正在发送大小为2000的多字节数组。为什么会这样 以下是我的TCPClient代码:TCP连接:接收阵列';它的大小出人意料地巨大,tcp,tcpclient,Tcp,Tcpclient,我正在发送大小为2000的多字节数组。为什么会这样 以下是我的TCPClient代码: byte[] receiveData = new byte[64000]; DataInputStream input = new DataInputStream(socket.getInputStream()); int size = input.read(receiveData); byte[] receiveDataNew
byte[] receiveData = new byte[64000];
DataInputStream input = new DataInputStream(socket.getInputStream());
int size = input.read(receiveData);
byte[] receiveDataNew = new byte[size];
System.arraycopy(receiveData,0,receiveDataNew,0,size);
System.out.println("length of receiveData is " + size);
GenericRecord result = AvroByteReader.readAvroBytes(receiveDataNew);
return result;
感谢您的帮助!谢谢大家! TCP没有任何消息边界的概念,因为它是一种流协议。它可以(也将)将多个发送合并为一个接收,甚至相反,将一个发送拆分为多个较小的接收
您的应用程序必须为此做好准备。TCP没有任何消息边界的概念,因为它是一种流协议。它可以(也将)将多个发送合并为一个接收,甚至相反,将一个发送拆分为多个较小的接收
您的应用程序必须为此做好准备。TCP不是面向记录的协议。它是面向流的。这意味着数据包可以在另一端接收之前重新组合。很可能,这意味着您已经收到了3或4组数据数组,并且正在同时处理它们 如果您希望将其用作面向记录或框架协议,则必须自己添加该框架。您可以为发送的数据预先设置一个大小,并且一次只能读取那么多的数据
如果记录的长度始终相同,则可以执行固定长度读取。我不知道Java的库,但您应该能够提供读取长度()。它是面向流的。这意味着数据包可以在另一端接收之前重新组合。很可能,这意味着您已经收到了3或4组数据数组,并且正在同时处理它们 如果您希望将其用作面向记录或框架协议,则必须自己添加该框架。您可以为发送的数据预先设置一个大小,并且一次只能读取那么多的数据
如果记录的长度始终相同,则可以执行固定长度读取。我不知道Java的库,但您应该能够提供读取的长度()。在数组之前发送数组长度,并读取那么多字节 基本上,您看到的是同时接收背靠背组合的多个阵列。在数组之前发送数组长度,并读取那么多字节 多谢各位。我想我只是打算用ObjectInputStream和ObjectOutputStream来代替。这可能比自己实现要容易。:)非常感谢。我想我只是打算用ObjectInputStream和ObjectOutputStream来代替。这可能比自己实现要容易。:)