测量Java IO和NIO中的套接字缓冲区

时间:2013-11-18 07:32:26

标签: java sockets io nio

我编写了一个简单的设置:客户端连接到服务器,服务器开始发送字节,客户端读取它们,但延迟时间为1秒。我有两个实现:使用Java IO和Java NIO。通过打印服务器发送的字节数和客户端接收的字节数,我尝试测量系统中客户端缓冲区的大小。当然,我通过socket.getReceiveBufferSize()方法仔细检查它。

这没有一些实际意义,只是在研究Java IO时的练习。

当我运行IO代码时,ok:socket.getReceiveBufferSize()返回大约8000个字节,发送和接收字节之间的差异始终保持在这个数字左右。即我在两个控制台中看到以下日志:“同时发送33000字节”和“收到25000字节”。

当我运行NIO代码时,情况就不同了。 delta总是大约27000字节,尽管channel.socket()。getReceiveBufferSize()像往常一样返回8000。

  1. 我的设置是否符合我的目的?
  2. 为什么NIO版本的缓冲区看起来更大?
  3. 为什么NIO版本中的缓冲区没有使用getReceiveBufferSize()方法结果?
  4. Windows,Java 6,客户端和服务器位于同一台计算机上。

1 个答案:

答案 0 :(得分:0)

  1. getReceiveBufferSize()返回的值不随传输而变化。它是缓冲区的大小,而不是当前其中的数据量。
  2. NIO没有从java.net.Socket设置不同的套接字发送/接收缓冲区大小。除非你这样做,否则他们都不会碰它。