src/org/nutz/repo/org/objectweb/asm/ByteVector.java
public ByteVector putUTF8(final String s) {
        int charLength = s.length();
        if (charLength > 65535) {
            throw new IllegalArgumentException();
        }
        int len = length;
        if (len + 2 + charLength > data.length) {
            enlarge(2 + charLength);
        }
        byte[] data = this.data;
        // optimistic algorithm: instead of computing the byte length and then
        // serializing the string (which requires two loops), we assume the byte
        // length is equal to char length (which is the most frequent case), and
        // we start serializing the string right away. During the serialization,
        // if we find that this assumption is wrong, we continue with the
        // general method.
        data[len++] = (byte) (charLength >>> 8);
        data[len++] = (byte) charLength;
        for (int i = 0; i < charLength; ++i) {
            char c = s.charAt(i);
            if (c >= '\001' && c <= '\177') {
                data[len++] = (byte) c;
            } else {
                length = len;
                return encodeUTF8(s, i, 65535);
            }
        }
        length = len;
        return this;
    }
public ByteVector putUTF8(final String s) {
        int charLength = s.length();
        if (charLength > 65535) {
            throw new IllegalArgumentException();
        }
        int len = length;
        if (len + 2 + charLength > data.length) {
            enlarge(2 + charLength);
        }
        byte[] data = this.data;
        // optimistic algorithm: instead of computing the byte length and then
        // serializing the string (which requires two loops), we assume the byte
        // length is equal to char length (which is the most frequent case), and
        // we start serializing the string right away. During the serialization,
        // if we find that this assumption is wrong, we continue with the
        // general method.
        data[len++] = (byte) (charLength >>> 8);
        data[len++] = (byte) charLength;
        for (int i = 0; i < charLength; ++i) {
            char c = s.charAt(i);
            if (c >= '\001' && c <= '\177') {
                data[len++] = (byte) c;
            } else {
                length = len;
                return encodeUTF8(s, i, 65535);
            }
        }
        length = len;
        return this;
    }
public ByteVector putUTF8 ( final String s ) { int charLength = s . length ( ) ; if ( charLength > 65535 ) { throw new IllegalArgumentException ( ) ; } int len = length ; if ( len + 2 + charLength > data . length ) { enlarge ( 2 + charLength ) ; } byte [ ] data = this . data ; // optimistic algorithm: instead of computing the byte length and then // serializing the string (which requires two loops), we assume the byte // length is equal to char length (which is the most frequent case), and // we start serializing the string right away. During the serialization, // if we find that this assumption is wrong, we continue with the // general method. data [ len ++ ] = ( byte ) ( charLength >>> 8 ) ; data [ len ++ ] = ( byte ) charLength ; for ( int i = 0 ; i < charLength ; ++ i ) { char c = s . charAt ( i ) ; if ( c >= ' ' && c <= ' ' ) { data [ len ++ ] = ( byte ) c ; } else { length = len ; return encodeUTF8 ( s , i , 65535 ) ; } } length = len ; return this ; }
Puts an UTF8 string into this byte vector. The byte vector is
automatically enlarged if necessary.

@param s
a String whose UTF8 encoded length must be less than 65536.
@return this byte vector.
Puts an UTF8 string into this byte vector . The byte vector is automatically enlarged if necessary .