我想使用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/