code: protected void prepareBuffer(final String key, final long cas,
      final byte[] val, final Object... extraHeaders) {
      int extraLen = 0;
      int extraHeadersLength = extraHeaders.length;
  
      if (extraHeadersLength > 0) {
        extraLen = calculateExtraLength(extraHeaders);
      }
  
      final byte[] keyBytes = KeyUtil.getKeyBytes(key);
      int bufSize = MIN_RECV_PACKET + keyBytes.length + val.length;
  
      ByteBuffer bb = ByteBuffer.allocate(bufSize + extraLen);
      assert bb.order() == ByteOrder.BIG_ENDIAN;
      bb.put(REQ_MAGIC);
      bb.put(cmd);
      bb.putShort((short) keyBytes.length);
      bb.put((byte) extraLen);
      bb.put((byte) 0);
      bb.putShort(vbucket);
      bb.putInt(keyBytes.length + val.length + extraLen);
      bb.putInt(opaque);
      bb.putLong(cas);
  
      if (extraHeadersLength > 0) {
        addExtraHeaders(bb, extraHeaders);
      }
  
      bb.put(keyBytes);
      bb.put(val);
  
      bb.flip();
      setBuffer(bb);
    }
docs: Prepare the buffer for sending.
  
  @param key the key (for keyed ops).
  @param cas the cas value.
  @param val the data payload.
  @param extraHeaders any additional headers that need to be sent.