簡體   English   中英

在Java IO和NIO中測量套接字緩沖區

[英]Measuring socket buffer in Java IO and NIO

我編寫了一個簡單的設置代碼:客戶端連接到服務器,服務器開始發送字節,客戶端讀取字節,但有1秒的延遲。 我有2種實現方式:使用Java IO和Java NIO。 通過打印服務器發送的字節數和客戶端打印的字節數,我嘗試測量系統中客戶端緩沖區的大小。 當然,我通過socket.getReceiveBufferSize()方法再次檢查了它。

這沒有任何實際意義,只是學習Java IO時的一個練習。

當我運行IO代碼時,它的正常運行:socket.getReceiveBufferSize()返回大約8000個字節,已發送和已接收字節之間的差異始終保持在這個數字附近。 即,我在兩個控制台中同時看到以下日志:“已發送33000字節”和“已接收25000字節”。

當我運行NIO代碼時,情況就不同了。 盡管channel.socket()。getReceiveBufferSize()通常返回8000,但增量始終約為27000字節。

  1. 我的設置是否符合我的目的?
  2. 為什么NIO版本中的緩沖區看起來更大?
  3. 為什么NIO版本中的緩沖區與getReceiveBufferSize()方法的結果不一致?

Windows,Java 6,客戶端和服務器位於同一台計算機上。

  1. getReceiveBufferSize()返回的值不會隨傳輸而變化。 它是緩沖區的大小,而不是當前其中的數據量。
  2. NIO沒有設置與java.net.Socket不同的套接字發送/接收緩沖區大小。 除非您這樣做,否則他們都不會碰它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM