最近发现在生产系统上频繁出现这个java.nio.charset.UnmappableCharacterException: Input length =2 这个报错,于是查代码来找出问题所在。
先贴一下关键的代码:
public class MmsProtocalDecoder implements ProtocolDecoder {
public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
// 先获取上次的处理上下文,其中可能有未处理完的数据
Context ctx = getContext(session);
// 先把当前buffer中的数据追加到Context的buffer当中
ctx.append(in);
// 把position指向0位置,把limit指向原来的position位置
IoBuffer buf = ctx.getBuffer();
buf.flip();
buf.mark();
int length = -1;
try {
buf.position(0);
buf.limit(length);
String content = buf.getString(ctx.getDecoder());
// 写入输出流中,以便IoHandler进行处理
out.write(content);
buf.clear();
} catch (NumberFormatException ex) {
_log.debug(