mina框架分析:自定义编码解码

本文介绍了如何在MINA框架中实现自定义编码和解码,包括创建自定义编码器和解码器,它们分别继承ProtocolEncoderAdapter和ProtocolDecoderAdapter,以及建立一个基于ProtocolCodecFactory的编解码工厂。通过这些步骤,开发者可以在业务处理中方便地应用自定义编码解码。尽管网上相关教程不多,但提供了参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mina支持自定义编码和解码,要完成自定义的,简单来讲需要完成三部分:

1)实现自己的编码器,继承与ProtocolEncoderAdapter;

package org.mina.server.codec;

import java.nio.charset.Charset;

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

/**
 * 编码器,用于发送数据时打包
 * */
public class MyEncoder extends ProtocolEncoderAdapter {

	private final Charset charset;

	static Logger log = Logger.getRootLogger();

	public MyEncoder(Charset charset) {
		this.charset = charset;
	}

	public void encode(IoSession session, Object message,
			ProtocolEncoderOutput out) throws Exception {
		log.debug("MyEncoder.encode()");
		
		//......实现编码..........//
	}
	
}


2)实现自己的解码器  ,继承与ProtocolDecoderAdapter


package org.mina.server.codec;

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

import org.apache.log4j.Logger;
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 MyDecoder extends ProtocolDecoderAdapter {

	static Logger log = Logger.getRootLogger();

	private final Charset charset;

	public MyDecoder() {
		this(Charset.defaultCharset());
	}

	public MyDecoder(Charset charset) {
		this.charset = charset;
	}

	public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out)
			throws Exception {
		log.debug("MyDecoder.decode()");

		//....接受数据,完成解码工作
		

	}

	public void dispose(IoSession session) throws Exception {
		log.debug("MyDecoder.dispose()");
	}

}


3)新建一个编/解码工厂,继承与ProtocolCodecFactory

package org.mina.server.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 MsgCodecFactory implements ProtocolCodecFactory {
	
	private final MsgEncoder encoder;
	private final MsgDecoder decoder;
	
	public MsgCodecFactory(){
		this(Charset.defaultCharset());
	}
	
	public MsgCodecFactory(Charset charset){
		this.encoder = new MsgEncoder(charset);
		this.decoder = new MsgDecoder(charset);
	}

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

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

}

完成了这三部分,那么在我们使用的时候,只需要在开始业务处理的地方直接使用。

DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();

chain.addLast("decoderFilter", new ProtocolCodecFilter(new MyCodecFactory(Charset.forName("UTF-8"))));

网上这类的帖子很少,好桑心~

参考:http://item.congci.com/item/apache-mina-zidingyi-bianjiema

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值