Mina TextEncoder

package com.prosodie.ws.tuxedo.net.codec;

import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.AttributeKey;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;

public class TextEncoder extends ProtocolEncoderAdapter
{

private final AttributeKey ENCODER = new AttributeKey(getClass(), "encoder");

private final Charset charset;


public TextEncoder(Charset charset)
{
if (charset == null)
{
throw new IllegalArgumentException("charset parameter should not be null");
}


this.charset = charset;

}

public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception
{
CharsetEncoder encoder = (CharsetEncoder) session.getAttribute(ENCODER);

if (encoder == null)
{
encoder = charset.newEncoder();
session.setAttribute(ENCODER, encoder);
}

String value = (message == null ? "" : message.toString());
IoBuffer buffer = IoBuffer.allocate(value.getBytes().length).setAutoExpand(true);
buffer.putString(value, encoder);


buffer.flip();
out.write(buffer);
}

}



package com.prosodie.ws.tuxedo.net.codec;

import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.AttributeKey;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolDecoderAdapter;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;

public class TextDecoder extends ProtocolDecoderAdapter
{


private final AttributeKey DECODER = new AttributeKey(getClass(), "decoder");

private final Charset charset;


public TextDecoder(Charset charset)
{
if (charset == null)
{
throw new IllegalArgumentException("charset parameter should not be null");
}

this.charset = charset;


}


@Override
public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out)
throws Exception
{

CharsetDecoder decoder = (CharsetDecoder) session.getAttribute(DECODER);

if (decoder == null)
{
decoder = charset.newDecoder();
session.setAttribute(DECODER, decoder);
}


if (in != null)
{
out.write(in.getString(decoder));
}


}


}



package com.prosodie.ws.tuxedo.net.codec;

import java.nio.charset.Charset;

import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFactory;
import org.apache.mina.filter.codec.ProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolEncoder;


public class TextCodecFactory implements ProtocolCodecFactory
{

private final TextEncoder encoder;

private final TextDecoder decoder;


public TextCodecFactory(Charset charset)
{
encoder = new TextEncoder(charset);
decoder = new TextDecoder(charset);
}


public ProtocolEncoder getEncoder(IoSession session)
{
return encoder;
}

public ProtocolDecoder getDecoder(IoSession session)
{
return decoder;
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值