CoderResult (CharBuffer in, ByteBuffer out) { while (in.position() < in.limit()) { in.mark(); try { char c = in.get(); if (c < '\u0080') { ByteBuffer byteBuffer = myBaseCharset.encode(Character.toString(c)); out.put(byteBuffer); } else { if (out.remaining() < 6) throw new BufferOverflowException(); out.put((byte)'\\'); out.put((byte)'u'); out.put(toHexChar(c >> 12)); out.put(toHexChar((c >> 8) & 0xf)); out.put(toHexChar((c >> 4) & 0xf)); out.put(toHexChar(c & 0xf)); } } catch (BufferUnderflowException e) { in.reset(); } catch (BufferOverflowException e) { in.reset(); return CoderResult.OVERFLOW; } } return CoderResult.UNDERFLOW; }