private static long countBytes(String s, boolean shortLength) throws UTFDataFormatException {
    long result = 0;
    final int length = s.length();
    for (int i = 0; i < length; ++i) {
      char ch = s.charAt(i);
      if (ch != 0 && ch <= 127) { // U+0000 uses two bytes.
        ++result;
      } else if (ch <= 2047) {
        result += 2;
      } else {
        result += 3;
      }
      if (shortLength && result > 65535) {
        throw new UTFDataFormatException("String more than 65535 UTF bytes long");
      }
    }
    return result;
  }
Returns the number of bytes the modified UTF8 representation of 's' would take.
android/android_framework/dex-maker/src/main/java/com/android/dex/Mutf8.java