WinSockでrecvを実行した場合に

-----------------------
7330 : recv(7330) = 0 ms
13242 : recv(35562) = 0 ms
22320 : recv(22320) = 200 ms
-----------------------
(戻り値:recv(受信長) = 所要時間)

となった環境でJavaのInputStream.read()をしてみると全受信まで50msほどでした。
そこでrecv毎にrecv(all)して受信のバッファリングなどしてみたのですが、結果は変わらずでした。
APIを直接叩くよりInputStream.read()のほうが速いのはなぜなんでしょうか?