static void encode ( Encoder encoder , Writer out , String str ) throws IOException { if ( str == null ) { // consistent with String.valueOf(...) use "null" for null. str = "null" ; } // quick pass--see if we need to actually encode anything, if not // return the value unchanged. final int n = str . length ( ) ; int j = encoder . firstEncodedOffset ( str , 0 , n ) ; if ( j == n ) { out . write ( str ) ; return ; } // otherwise, we need to encode. We use a buffer to avoid // excessive memory allocation for these calls. Note: this means that // an encoder implementation must NEVER call this method internally. new Buffer ( ) . encode ( encoder , out , str , j ) ; }
Core encoding loop shared by public methods . It first uses the encoder to scan the input for characters that need encoding . If no characters require encoding the input string is written directly to the writer . Otherwise a buffer is used to encode the remainder of the input to the buffers . This version saves a wrapping in an String .