繁体   English   中英

通过套接字java发送字节数组而不发送长度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM