gpt4 book ai didi

java - BufferedOutputStream 连接两个连续的flush() 调用

转载 作者:行者123 更新时间:2023-11-30 03:20:14 27 4
gpt4 key购买 nike

我想使用 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 中不存在消息这样的东西,因此不能保证写入大小和读取大小之间的任何对应关系。它是一种字节流协议(protocol)。如果您想要消息边界,您必须自己提供它们。

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com