Sockets java.io OutputStreamWriter.writer在不频繁刷新时阻塞
我正在将数据写入socket.writer,我看到的是,如果我不经常刷新,writer就会被阻塞,永远也不会刷新。如果我每次写的时候都把它冲洗一下,就可以了。我不知道如何确定显式刷新的正确频率Sockets java.io OutputStreamWriter.writer在不频繁刷新时阻塞,sockets,tcp,socket.io,tcpclient,serversocket,Sockets,Tcp,Socket.io,Tcpclient,Serversocket,我正在将数据写入socket.writer,我看到的是,如果我不经常刷新,writer就会被阻塞,永远也不会刷新。如果我每次写的时候都把它冲洗一下,就可以了。我不知道如何确定显式刷新的正确频率 while ((subQueue.readableElements()) > 0) { int batchSize = subQueue.getReadableElements(buf, 0, buf.length); for (int i = 0; i
while ((subQueue.readableElements()) > 0) {
int batchSize = subQueue.getReadableElements(buf, 0, buf.length);
for (int i = 0; i < batchSize; i++) {
TcpStringClient.this.outwriter.write(buf[i].getValue().toString());
TcpStringClient.this.outwriter.write(RECORD_DELIMITOR);
}
}
this.outwriter.flush();
非常感谢您提供的任何帮助如果您正在向套接字写入数据,那么如果读取端比写入端慢,则会被阻止
刷新与此无关。您使用的是哪种类型的outputStream?它是java.io.OutputStreamWriter OutWriter。如果StreamWriter认为没有足够的数据,则不会发送写入的值,这一点我并不感到惊讶。您的数据正在被缓冲,而flush所做的只是发送缓冲数据。我不知道具体的实现细节…我想还有别的事情在发生。如果其内部缓冲区已满,写入程序将自动尝试刷新。这是真的,您在另一个问题上帮助我解决了阻塞问题。在这种情况下,当我为每100次写入更改batchsize和flush时,就可以了。如果批处理大小类似于200,则写入将被阻止。服务器端的速度快于此客户端大小。