in openwire-core/src/main/java/org/apache/activemq/openwire/codec/BaseDataStreamMarshaller.java [292:326]
protected int tightMarshalString1(String value, BooleanStream bs) throws IOException {
bs.writeBoolean(value != null);
if (value != null) {
int strlen = value.length();
int utflen = 0;
char[] charr = new char[strlen];
int c = 0;
boolean isOnlyAscii = true;
value.getChars(0, strlen, charr, 0);
for (int i = 0; i < strlen; i++) {
c = charr[i];
if ((c >= 0x0001) && (c <= 0x007F)) {
utflen++;
} else if (c > 0x07FF) {
utflen += 3;
isOnlyAscii = false;
} else {
isOnlyAscii = false;
utflen += 2;
}
}
if (utflen >= Short.MAX_VALUE) {
throw new IOException("Encountered a String value that is too long to encode.");
}
bs.writeBoolean(isOnlyAscii);
return utflen + 2;
} else {
return 0;
}
}