code: public final void translate(final CharSequence input, final Writer out) throws IOException {
          if (out == null) {
              throw new IllegalArgumentException("The Writer must not be null");
          }
          if (input == null) {
              return;
          }
          int pos = 0;
          final int len = input.length();
          while (pos < len) {
              final int consumed = translate(input, pos, out);
              if (consumed == 0) {
                  final char[] c = Character.toChars(Character.codePointAt(input, pos));
                  out.write(c);
                  pos+= c.length;
                  continue;
              }
              // contract with translators is that they have to understand codepoints
              // and they just took care of a surrogate pair
              for (int pt = 0; pt < consumed; pt++) {
                  pos += Character.charCount(Character.codePointAt(input, pos));
              }
          }
      }
docs: Translate an input onto a Writer. This is intentionally final as its algorithm is
  tightly coupled with the abstract method of this class.
  
  @param input CharSequence that is being translated
  @param out Writer to translate the text to
  @throws IOException if and only if the Writer produces an IOException