我想使用BufferedOutputStream发送单独的消息。所以我做bos.write(msg1); bos.flush(); bos.write(msg2); bos.flush()。另一方面,我有一个BufferedReader,它依赖于这些消息的分离:

BufferedReader br = new BufferedReader(new InputStreamReader(server.getInputStream()));
InputStream is = server.getInputStream();
while (true) {
    if (br.ready()) {
        byte[] bytes = new byte[is.available()];
        is.read(bytes);
    }
}


但是我得到的是这样的:
“向客户端发送30个字节;向客户端发送30个字节”,另一端:“接收到60个字节”。

最佳答案

您提到的行为来自TCP,而不是BufferedOutputStream,原因是TCP中没有诸如消息之类的消息,因此不能保证写入大小和读取大小之间的任何对应关系。这是一个字节流协议。如果需要消息边界,则必须自己提供。

您也不应以这种方式使用ready()available()。只需使用固定大小的缓冲区,然后阻塞即可。

关于java - BufferedOutputStream连接两个顺序的flush()调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31494279/

10-10 18:56