0
while (true) {
    loc = getLocationOnScreen();

    out.writeLong((long)loc.getX());
    out.writeLong((long)loc.getY());
    out.flush();

    i++;
    System.out.println(i);

}

这段代码会愉快地运行大约 3 秒钟,然后变慢,然后停止。

i结束于约16491,永远不会继续增加。这里发生了什么?

4

1 回答 1

1

它变慢了,因为在接收端,在读取下一个值之前,您可能正在使用您发送的值执行长时间任务。所以对方读取数据的速率小于你向对方发送数据的速率。这会不断填充另一端的接收缓冲区并在发送端发送缓冲区。最终,当两个缓冲区都被完全填满时,数据的传输就会停止。

于 2013-02-17T17:39:15.397 回答