gpt4 book ai didi

java - 使用 BufferedOutputStream 会导致应用程序停止

转载 作者:搜寻专家 更新时间:2023-11-01 02:17:22 30 4
gpt4 key购买 nike

我的服务器/客户端对中有这行代码:

BufferedOutputStream out = new BufferedOutputStream (clientSocket.getOutputStream());

它运行良好,代码运行良好,那么如果我将其修改为:

BufferedOutputStream out = new BufferedOutputStream (new BufferedOutputStream(clientSocket.getOutputStream()));

应用程序的执行将在发送输出的地方停止。我真的只做了那个修改,并且以这种方式对流非常陌生,尤其是套接字。

有没有明显的错误?

最佳答案

是的,这与 BufferedOutputStream 的行为一致,顾名思义,它会在发送之前缓冲输出。

当您将对象写入 ObjectOutputStream 时,字节将被传递到 BufferedOutputStream,它只会在缓冲区填满时将它们发送到套接字。所以你的对象将在缓冲区中“徘徊”,等待被刷新。所以您的输出并没有真正“发送”,因为它们还没有到达套接字。

如果你想继续使用 BufferedOutputStream,那么你可能需要定期 flush() 它,以保持事情的进展。 ObjectOutputStream 上的 flush() 方法将依次调用 BufferedOutputStream 上的 flush(),这将清空缓冲区并将对象发送到管道中。

不过,我不得不问,为什么您需要使用 BufferedOuputStream。您是否有需要缓冲来解决的性能问题?如果不是,则将其删除,它会增加您可能不需要的复杂性。

关于java - 使用 BufferedOutputStream 会导致应用程序停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4309137/

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