public static void main(String args) throws Exception {
Charset charset = Charset.forName("Shift_JIS");
CharsetEncoder encoder = charset.newEncoder().onMalformedInput(CodingErrorAction.REPORT);
char input = new char[]{
'a',
'あ',
0xff0d,
0xff0d,
'あ',
'い',
};
CharBuffer in = CharBuffer.wrap(input);
int n = (int)(in.remaining() * encoder.averageBytesPerChar());
ByteBuffer out = ByteBuffer.allocate(n);
if (n == 0) {
return ;
}
int unmappable = 0;
encoder.reset();
for (;;) {
CoderResult cr;
if (in.hasRemaining()) {
cr = encoder.encode(in, out, true);
} else {
cr = encoder.flush(out);
}
if (cr.isUnderflow()) {
break;
}
if (cr.isOverflow()) {
n *= 2;
ByteBuffer o = ByteBuffer.allocate(n);
out.flip();
o.put(out);
out = o;
continue;
}
if (cr.isUnmappable()) {
in.position(in.position() + 1);
unmappable++;
continue ;
}
}
System.out.println(out.position() + unmappable * 2);
out.flip();
System.out.println(TextFilters.byteArrayToHex(out.array()));
System.out.println(out.position());
System.out.println(unmappable);
}