protected int channelRead(ReadableByteChannel channel, ByteBuffer buffer) throws IOException {

    int count = (buffer.remaining() <= NIO_BUFFER_LIMIT)
      ? channel.read(buffer)
      : channelIO(channel, null, buffer);
    if (count > 0) {
      metrics.receivedBytes(count);
    }
    return count;
  }
This is a wrapper around
{@link java.nio.channels.ReadableByteChannel#read(java.nio.ByteBuffer)}. If the amount of data
is large, it writes to channel in smaller chunks. This is to avoid jdk from creating many
direct buffers as the size of ByteBuffer increases. There should not be any performance
degredation.
@param channel writable byte channel to write on
@param buffer  buffer to write
@return number of bytes written
@throws java.io.IOException e
@see java.nio.channels.ReadableByteChannel#read(java.nio.ByteBuffer)
hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java