我有一些代码:
  
  
   - 
    从一个
    
     ReadableByteChannel
    变成一个
     ByteBuffer
    ,
- 
    注意传输的字节,
   
- 
    暂停几十到几百毫秒,
   
- 
    通过
    
     ByteBuffer公司
    
     WritableByteChannel
    
   一些细节:
  
  
   - 
    两个通道都是TCP/IP套接字。
   
- 
    总的连接读取大小以数十兆字节为单位。
   
- 
    源套接字(该套接字
    
    正在从中获取字节)位于同一台计算机上。
- 
    HP DL380s上的Debian Lenny 64位
   
- 
    Sun Java 1.6.0更新20
   
   问题是,无论ByteBuffer分配多大
   
    .allocate()
   
   或
   
    .allocateDirect()
   
   ,读入ByteBuffer的字节数最大为8KB。我的目标ByteBuffer大小是256KB,这只是正在使用的一小部分(1/32)。大约10%的时间只有2896字节被读入。
  
  
  
  tcp        0 192384 1.2.3.4:8088     1.2.3.4:53404    ESTABLISHED
tcp6  110144      0 1.2.3.4:53404    1.2.3.4:8088     ESTABLISHED
  
  
  
   我试着设置套接字属性,使其有利于带宽而不是延迟,但没有改变。
  
  Socket socket = new Socket(host.getHostName(), host.getPort());
socket.setPerformancePreferences(1, 0, 2);  //bw > connection time > latency
  
   当我记录
   
    socket.getReceiveBufferSize()
   
   ,它一直报告只有43856字节。虽然它比我想要的小,但仍然超过8KB。(这也不是一个很圆的数字,我早就预料到了。)
  
  
  
  
   我错过了什么?我能做些什么来纠正它?