code: public MessagePacker addPayload(byte[] src, int off, int len)
              throws IOException
      {
          if (buffer == null || buffer.size() - position < len || len > bufferFlushThreshold) {
              flush();  // call flush before add
              // Directly add the payload without using the buffer
              out.add(src, off, len);
              totalFlushBytes += len;
          }
          else {
              buffer.putBytes(position, src, off, len);
              position += len;
          }
          return this;
      }
docs: Writes a byte array to the output.
  <p>
  This method is used with {@link #packRawStringHeader(int)} or {@link #packBinaryHeader(int)} methods.
  <p>
  Unlike {@link #writePayload(byte[], int, int)} method, this method does not make a defensive copy of the
  given byte array, even if it is shorter than {@link MessagePack.PackerConfig#withBufferFlushThreshold(int)}.
  This is faster than {@link #writePayload(byte[])} method but caller must not modify the byte array after
  calling this method.
  
  @param src the data to add
  @param off the start offset in the data
  @param len the number of bytes to add
  @return this
  @throws IOException when underlying output throws IOException
  @see #writePayload(byte[], int, int)