static public int encodeToByteArray ( CharSequence charSeq , char [ ] charBuffer , int charOffset , int charLength , byte [ ] byteBuffer , int byteOffset ) { int c = 0 ; int bytePos = byteOffset ; // start at byte offset int charPos = charOffset ; // start at char offset int charAbsLength = charPos + charLength ; if ( charBuffer == null ) { if ( charSeq == null ) { throw new IllegalArgumentException ( "Both charSeq and charBuffer cannot be null" ) ; } // use charSequence rather than charBuffer charOffset = 0 ; charAbsLength = charSeq . length ( ) ; } // optimized method is only ascii chars used for ( ; charPos < charAbsLength ; charPos ++ ) { // optimized method for getting char to encode if ( charBuffer != null ) { c = charBuffer [ charPos ] ; } else { c = charSeq . charAt ( charPos ) ; } if ( ! ( ( c >= 0x0000 ) && ( c <= 0x007F ) ) ) break ; byteBuffer [ bytePos ++ ] = ( byte ) c ; } for ( ; charPos < charAbsLength ; charPos ++ ) { // optimized method for getting char to encode if ( charBuffer != null ) { c = charBuffer [ charPos ] ; } else { c = charSeq . charAt ( charPos ) ; } if ( ( c >= 0x0000 ) && ( c <= 0x007F ) ) { byteBuffer [ bytePos ++ ] = ( byte ) c ; } else if ( c > 0x07FF ) { byteBuffer [ bytePos ++ ] = ( byte ) ( 0xE0 | ( ( c >> 12 ) & 0x0F ) ) ; byteBuffer [ bytePos ++ ] = ( byte ) ( 0x80 | ( ( c >> 6 ) & 0x3F ) ) ; byteBuffer [ bytePos ++ ] = ( byte ) ( 0x80 | ( c & 0x3F ) ) ; } else { byteBuffer [ bytePos ++ ] = ( byte ) ( 0xC0 | ( ( c >> 6 ) & 0x1F ) ) ; byteBuffer [ bytePos ++ ] = ( byte ) ( 0x80 | ( c & 0x3F ) ) ; } } return ( bytePos - byteOffset ) ; }
Encode the string to an array of UTF - 8 bytes . The buffer must be pre - allocated and have enough space to hold the encoded string .