docs: public static byte[] create(byte[][] rowDatas, ColumnType[] columnTypes) {
  
      int totalLength = 0;
      for (byte[] rowData : rowDatas) {
        if (rowData == null) {
          totalLength++;
        } else {
          int length = rowData.length;
          if (length < 251) {
            totalLength += length + 1;
          } else if (length < 65536) {
            totalLength += length + 3;
          } else if (length < 16777216) {
            totalLength += length + 4;
          } else {
            totalLength += length + 9;
          }
        }
      }
      byte[] buf = new byte[totalLength];
  
      int pos = 0;
      for (byte[] arr : rowDatas) {
        if (arr == null) {
          buf[pos++] = (byte) 251;
        } else {
          int length = arr.length;
          if (length < 251) {
            buf[pos++] = (byte) length;
          } else if (length < 65536) {
            buf[pos++] = (byte) 0xfc;
            buf[pos++] = (byte) length;
            buf[pos++] = (byte) (length >>> 8);
          } else if (length < 16777216) {
            buf[pos++] = (byte) 0xfd;
            buf[pos++] = (byte) length;
            buf[pos++] = (byte) (length >>> 8);
            buf[pos++] = (byte) (length >>> 16);
          } else {
            buf[pos++] = (byte) 0xfe;
            buf[pos++] = (byte) length;
            buf[pos++] = (byte) (length >>> 8);
            buf[pos++] = (byte) (length >>> 16);
            buf[pos++] = (byte) (length >>> 24);
            //byte[] cannot have more than 4 byte length size, so buf[pos+5] -> buf[pos+8] = 0x00;
            pos += 4;
          }
          System.arraycopy(arr, 0, buf, pos, length);
          pos += length;
        }
      }
      return buf;
    }