使用BufferedOutputStream会导致应用程序暂停

时间:2010-11-29 23:26:44

标签: java

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

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

它工作正常,代码运行良好,然后如果我将其修改为:

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

应用程序的执行将停止发送输出的位置。我真的只是做了那个修改,并且对这种方式的流非常新,特别是套接字。

有没有明显的错误?

1 个答案:

答案 0 :(得分:6)

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

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

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

但是,我不得不问,为什么你需要使用BufferedOuputStream。您是否有需要缓冲才能解决的性能问题?如果没有,那么只需将其删除,就会增加您可能不需要的复杂性。