我有一个问题。我想通过套接字发送一个字节数组,但我不想发送它的长度。我是从服务器端读取的吗?
我尝试过这样的事情:
dos = new DataOutputStream(socket.getOutputStream);
dos.write(myByteArray);
并在服务器端
byte data = new data[100];
dis.read(data);
但是这样,我读了100个字节或者没有字节。我可以读取确切的号码。我发送的字节数? 感谢
答案 0 :(得分:0)
我可以读取确切的号码。我发送的字节数?
如果你发送任意字节而没有任何形式的编码,那么你需要发送一个长度(第一个),或者你需要在写完最后一个字节后关闭套接字流。
如果您可以对字节 1 进行编码,或者如果您保证某些字节永远不会出现,那么客户端可以发送一个特殊的"字节结束数组"数组最后一个字节后的标记。
AFAIK,没有其他可靠的解决方案 2 。
1 - 例如,编码可以简单到将256个可能的字节值中的一个保留为"转义"当您想将其作为数据发送时,使用两个转义来表示该值。
2 - 考虑这个"解决方案"。写入字节后,客户端在发送更多数据之前至少等待N秒。如果服务器没有看到N秒的任何字节,它会将其解释为意味着其他数据不是第一个字节数组的一部分。这是不稳定的原因是,如果存在拥塞或临时网络中断,并且数据流被延迟> N秒,它将看起来到客户端已经完成的服务器,当它没有时。
答案 1 :(得分:0)
回复晚,可能对其他人有所帮助。
ArrayList<Byte> byteList = new ArrayList<>();
do {
byteList.add(inputStream.readByte());
} while (inputStream.available()!=0);
这帮助了我..不知道这是否是合法的方法
将列表转换为字节数组之后