Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
while (true) { loc = getLocationOnScreen(); out.writeLong((long)loc.getX()); out.writeLong((long)loc.getY()); out.flush(); i++; System.out.println(i); }
这段代码会愉快地运行大约 3 秒钟,然后变慢,然后停止。
i结束于约16491,永远不会继续增加。这里发生了什么?
i
16491
它变慢了,因为在接收端,在读取下一个值之前,您可能正在使用您发送的值执行长时间任务。所以对方读取数据的速率小于你向对方发送数据的速率。这会不断填充另一端的接收缓冲区并在发送端发送缓冲区。最终,当两个缓冲区都被完全填满时,数据的传输就会停止。