我的服务器/客户端对中有这行代码:
BufferedOutputStream out = new BufferedOutputStream (clientSocket.getOutputStream());
Run Code Online (Sandbox Code Playgroud)
它工作正常,代码运行良好,然后如果我将其修改为:
BufferedOutputStream out = new BufferedOutputStream (new BufferedOutputStream(clientSocket.getOutputStream()));
Run Code Online (Sandbox Code Playgroud)
应用程序的执行将停止发送输出的位置.我真的只是做了那个修改,并且对这种方式的流非常新,特别是套接字.
有没有明显的错误?
是的,这与行为一致,BufferedOutputStream顾名思义,它会在发送之前缓冲输出.
当您将对象写入时ObjectOutputStream,字节将被传递给它BufferedOutputStream,只有当缓冲区填满时才会将它们发送到套接字.所以你的对象将在缓冲区中"闲逛",等待刷新.所以你的输出并没有真正"发送",因为它们还没有像套接字一样.
如果你想继续使用BufferedOutputStream,那么你可能需要定期使用flush()它,以便让事情继续前进.在flush()对方法ObjectOutputStream将依次调用flush()上BufferedOutputStream,这将清空缓存并发送对象沿管路.
不过,我不得不问,为什么你需要使用它BufferedOuputStream.您是否有需要缓冲才能解决的性能问题?如果没有,那么只需将其删除,就会增加您可能不需要的复杂性.