`

Mina 解码器

    博客分类:
  • Mina
 
阅读更多

1.定义Decode

package test.mina;

import java.util.Arrays;

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

public class MessageDecoder extends CumulativeProtocolDecoder {

	@Override
	public boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
		try {
//可以使用这两个函数,比较整数后面的长度大于等于prefixLength转换为整数后的长度
//in.prefixedDataAvailable(prefixLength)
//in.prefixedDataAvailable(prefixLength, maxDataLength)
			if (in != null && in.remaining() >= 4) {
				in.mark();
				byte[] b = new byte[4];
				in.get(b);
				int length = ByteUtil.byte2int(b, 0);
				in.reset();
				if (in.remaining() >= length) {
					byte[] bytes = new byte[length];
					in.get(bytes);
					out.write(IoBuffer.wrap(bytes));
					return true;
				}
			}
		} catch (Exception e) {

		return false;

	}

}

 

2.定义Encode

package test.mina;

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

public class MessageEncoder extends ProtocolEncoderAdapter {

	@Override
	public void encode(IoSession session, Object message,
			ProtocolEncoderOutput out) throws Exception {

	}

}

 

3.定义Factory

package test.mina;

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 CodecFactory implements ProtocolCodecFactory {
	private Log log = LogFactory.getLog(this.getClass().getName());

	private final MessageDecoder decoder;
	private final MessageEncoder encode;

	public CodecFactory() {
		decoder = new MessageDecoder();
		encode = new MessageEncoder();
	}

	@Override
	public ProtocolEncoder getEncoder(IoSession session) throws Exception {

		return encode;
	}

	@Override
	public ProtocolDecoder getDecoder(IoSession session) throws Exception {

		return decoder;
	}

}

4.加入客户端或服务器

//Client 注意顺序
connector.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new CodecFactory()));

connector.getFilterChain().addLast("threadPool-client",
				new ExecutorFilter(executor));


//Server
acceptor.getFilterChain().addLast("codec",
					new ProtocolCodecFilter(new CodecFactory()));

 

 

分享到:
评论

相关推荐

    mina自定义编解码器详解

    **mina自定义编解码器详解** mina是一个Java开发的网络通信框架,广泛应用于TCP和UDP协议的服务器和客户端开发。在mina框架中,编解码器(Codec)扮演着至关重要的角色,它负责将应用层的数据转换为网络传输的字节...

    mina解码器

    在这个场景中,"mina解码器"是指使用MINA框架来实现自定义的编码和解码逻辑,以处理网络数据的收发。 解码器(Decoder)和编码器(Encoder)是MINA框架中用于处理数据传输的核心组件。它们分别负责将接收到的原始...

    MINA 协议解码过滤器

    在`mina src`压缩包中,可能包含MINA框架的源代码,你可以通过阅读这些源码来深入理解MINA的工作原理,特别是过滤器和解码器的实现。这对于学习MINA、理解和定制自己的网络服务非常有帮助。同时,结合提供的博客链接...

    mina自定义编码解码器

    本文将深入探讨如何在Mina中自定义编码解码器,这对于实现特定的网络通信协议至关重要。 首先,了解Mina的编码解码器架构是必要的。Mina使用了Chain of Responsibility设计模式,通过Filter链来处理进来的数据。...

    mina编解码器Demo

    《mina编解码器Demo详解》 mina是一个高性能、异步事件驱动的网络通信框架,主要应用于Java平台,常用于构建TCP和UDP服务。在本文中,我们将深入探讨MINA框架中的编解码器(Codec)概念,并通过提供的`mina_server`...

    mina编解码示例

    在这个示例中,我们会设置一个`ProtocolCodecFilter`,它包含我们的自定义编码器和解码器。当服务器接收到数据时,`ProtocolDecoder`会将接收到的字节流转换成业务对象;当服务器需要发送数据时,`ProtocolEncoder`...

    mina 多路分离解码

    在mina中,我们可以自定义解码器来处理特定的协议或数据格式。例如,如果我们的应用使用了某种特定的二进制协议,我们可以创建一个解码器来解析这种协议的数据包,并将其转换为对应的Java对象。 多路分离解码的工作...

    springboot整合mina

    下面我们将详细讨论如何在SpringBoot项目中整合Mina,并自定义解码器。 首先,我们需要在SpringBoot项目中添加Mina的相关依赖。这通常通过在`pom.xml`或`build.gradle`文件中引入Mina的依赖项来完成。对于Maven用户...

    apache-mina-2.0.4.rar_apache mina_mina

    1. **Filter Chain**:Mina的核心设计模式之一是过滤器链。每个连接都有一系列过滤器,它们按照顺序处理入站和出站事件。过滤器可以实现特定功能,如数据编码解码、安全验证、性能监控等。 2. **Session**:Session...

    mina的高级使用,mina文件图片传送,mina发送文件,mina报文处理,mina发送xml和json

    Mina允许开发者自定义编码解码策略,因此可以根据需要选择合适的文件分块策略进行大文件传输。此外,为了保证传输的完整性和一致性,通常会使用校验和或哈希算法来验证文件的正确性。 4. **Mina报文处理** Mina...

    Mina断包,粘包处理(完整实例,有客户端,服务端)

    在Mina中,解决这个问题的关键在于定义正确的协议编码器和解码器。例如,你可以使用FixedLengthFrameDecoder或LineBasedFrameDecoder来确保每个接收到的数据块都能正确地组合成原始消息。 2. **粘包**: 相反,...

    国家商用密码(七)在Apache MINA上实现二进制流的SM4编解码器-附件资源

    国家商用密码(七)在Apache MINA上实现二进制流的SM4编解码器-附件资源

    MINA_API+MINA_DOC+mina

    学习MINA API,开发者可以掌握异步网络编程的核心技巧,理解MINA如何通过事件驱动和过滤器链机制来提高网络应用的效率。同时,MINA支持多种协议,如TCP、UDP、SSL/TLS等,使得它在各种网络通信场景下都具有广泛的...

    apache mina 框架实例

    以下是对Mina框架实例、自定义协议包、编码器和解码器的详细解释: **Apache Mina框架实例:** Apache Mina框架的核心思想是基于事件驱动和非阻塞I/O,这使得它在处理大量并发连接时表现出色。在Mina中,开发者可以...

    给予mina 协议进行大数据传输

    7. **自定义编码与解码**:如前所述,MINA支持自定义编解码器,允许开发者根据业务需求定制数据序列化和反序列化过程。 8. **社区支持**:MINA作为一个成熟的开源项目,拥有活跃的社区和丰富的文档,遇到问题时可以...

    Mina+Socket通信

    文件"MinaSocket"可能包含了实现上述功能的详细代码,包括服务端的Acceptor配置、过滤器设置、事件处理器编写,以及客户端的Socket连接、数据发送和接收等。通过阅读和理解这些代码,你可以更好地掌握Mina与Socket...

    mina 实现简单通讯

    总结来说,这个"mina 实现简单通讯"项目展示了一个基于Apache MINA的网络通信示例,涵盖了服务端和客户端的创建、自定义的协议编解码器、以及必要的网络配置。这为学习和理解MINA框架提供了一个基础平台,并且可以在...

    mina 断包,粘包问题解决

    2. 自定义编码解码器:Mina支持用户自定义编码器和解码器,可以在数据发送前进行封装,接收后进行解析。通过这种方式,可以在数据包之间添加分隔符或者使用特定的协议格式,确保每个数据包都能正确地被识别和处理。 ...

    mina框架自定义解编码器

    《MINA框架自定义解编码器的深度解析与实践》 MINA(Java Multithreaded Network Application Framework)是一个开源的、跨平台的Java网络应用框架,它为开发者提供了高度可扩展性和高性能的网络通信能力。MINA的...

    Mina开发实例(服务端、客户端)DEMO

    此外,Mina支持多种编码和解码器,如LineDelimiterFilter(按行分割数据)、ProtobufDecoder(解析Google Protobuf格式数据)等。在实际应用中,根据数据格式选择合适的过滤器,可以有效地处理网络传输中的数据。 ...

Global site tag (gtag.js) - Google Analytics