[英]Sending byte array through socket java without sending length
我有一个问题。 我想通过套接字发送一个字节数组,但我不想发送它的长度。 我可以从服务器端读取它吗?
我试过这样的事情:
dos = new DataOutputStream(socket.getOutputStream);
dos.write(myByteArray);
并在服务器端
byte data = new data[100];
dis.read(data);
但通过这种方式,我读取了 100 个字节或另一个字节数。 我能准确地读到没有吗? 我发送的字节数? 谢谢
我能准确地读到没有吗? 我发送的字节数?
如果您在没有任何形式的编码的情况下发送任意字节,那么您需要发送一个长度(第一个)或者您需要在写入最后一个字节后关闭套接字流。
如果您可以对字节1进行编码,或者如果您保证某些字节永远不会出现,那么客户端可以在数组的最后一个字节之后发送一个特殊的“字节数组结束”标记。
AFAIK,没有其他可靠的解决方案2 。
1 - 例如,编码可以像保留 256 个可能的字节值之一作为“转义”字节一样简单,并在您希望将其作为数据发送时使用两个转义来表示该值。
2 - 考虑这个“解决方案”。 写入字节后,客户端在发送更多数据之前至少等待 N 秒。 如果服务器在 N 秒内没有看到任何字节,它会将其解释为意味着进一步的数据不是第一个字节数组的一部分。 这是不稳定的原因是,如果出现拥塞或暂时的网络中断,并且数据流延迟了 > N 秒,它会向服务器看起来好像客户端已经完成,而实际上还没有。
迟到的回复,可能对其他人有帮助..
ArrayList<Byte> byteList = new ArrayList<>();
do {
byteList.add(inputStream.readByte());
} while (inputStream.available()!=0);
这对我有帮助..不知道这是否合法
在此之后将列表转换为字节数组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.