`
redsky008
  • 浏览: 352394 次
  • 性别: Icon_minigender_1
  • 来自: 成都正在项目
社区版块
存档分类
最新评论

转:模拟Mina2的TextLineCodecFactory中的TextLineDecoder解码器

阅读更多
转自:http://hi.baidu.com/huahua035/blog/item/f41f104ff73b0b19b3de05a4.html
模拟Mina2的TextLineCodecFactory中的TextLineDecoder解码器

Mina2中已经提供了TextLine解码的方式----根据文本的换行符进行解码;

注意这里的文本换行符是和操作系统相关的,比如windows是 \r\n ,linux是 \r;

我们就模拟一个windows下换行符的解码器------即看到 \r\n 就结束接受数据,把\r\n前的数据解码为字符串!

demo:

public class VamsMessageDecoder extends CumulativeProtocolDecoder {
private static Logger logger = Logger.getLogger(VamsMessageDecoder.class);
private final Charset charset;
int str_len = 0;
IoBuffer buf = IoBuffer.allocate(0).setAutoExpand(true).position(0);
public VamsMessageDecoder(Charset charset) {
   super();
   this.charset = charset;
}
@Override
protected boolean doDecode(IoSession session, IoBuffer in,
    ProtocolDecoderOutput out) throws Exception {
   String message = "";
   boolean mark1 = false;
   boolean mark2 = false;
   char temp_char;
   CharsetDecoder charsetDecoder = charset.newDecoder();
   while (in.hasRemaining()) {
    byte b = in.get();
    temp_char = (char) b;
    logger.info("---" + temp_char + "-----");
    buf.put(b);
    str_len++;
    logger.info("len-----"+str_len);
    if (b == '\r') {
     logger.info("换行01");
     mark1 = true;
     continue;
    }
    if (b == '\n' && mark1) {
     logger.info("换行02");
     mark2=true;
     break;
    }
   }
   if(mark1 && mark2){
    buf.flip();
    message = buf.getString(str_len, charsetDecoder);
    logger.info("-----------len-"+str_len+"-----str-"+ message+"----");
    str_len = 0;
    //buf = IoBuffer.allocate(0).setAutoExpand(true).position(0); // buf已经取光了,所以不用重复的初始化
    out.write(message.substring(0, message.length() - 2));
    return true;
   }
   return false;
}
}

//=============================注意=====================

注意:这里的换行符:\r\n是2个字节, \r的ASCII是13,\n的ASCII是10,千万不要把\r\n当作是字符串(“\r\n”文本换行符,而不是长度为4的字符串,注意跟 \\r\\n区分一下)

分享到:
评论

相关推荐

    mina自定义编解码器详解

    - 编解码器是mina中的核心组件,分为编码器(Encoder)和解码器(Decoder)两部分,分别处理数据的编码和解码过程。 - 编码器将应用对象转化为ByteBuffer,以便于网络传输;解码器则将接收到的ByteBuffer还原为...

    MINA 协议解码过滤器

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

    mina自定义编码解码器

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

    mina编解码器Demo

    在本文中,我们将深入探讨MINA框架中的编解码器(Codec)概念,并通过提供的`mina_server`和`minaclient`两个文件夹中的示例,来理解其工作原理。 MINA框架的核心在于它的异步I/O模型,它允许开发者以非阻塞的方式...

    Mina2.0快速入门与源码剖析.docx

    * 编解码器的使用:TextLineCodecFactory * 异常处理机制:IOException 五、Mina2.0 框架源码剖析(三) Mina2.0 框架源码剖析(三)主要包括了解 Mina2.0 的会话管理、会话超时机制、idle 机制等。 知识点: * ...

    Apache Mina核心jar包:mina-core-2.0.7

    Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利...当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供)。

    Mina2中文文档

    根据提供的信息,我们可以详细解析与"Mina2中文文档"相关的各个关键知识点: ### Mina2中文文档概述 #### Introduction Mina2是一个基于NIO(Non-blocking I/O)的高效网络通信框架,由Apache软件基金会维护。该...

    Mina入门:mina版之HelloWorld

    2. **Filter**:过滤器是Mina中的重要概念,它允许我们对网络通信的数据进行处理。开发者可以定义多个过滤器,每个过滤器可以执行特定的操作,如数据编码、解码或安全检查。过滤器链的概念使得我们可以按顺序处理...

    MINA2 用户手册(中英文2个版本)加API(英文)

    3. **Filter机制**:MINA2的过滤器机制允许用户插入自定义处理逻辑,这些过滤器按照预设顺序执行,可以用于数据编码解码、安全处理、日志记录等。开发者可以通过实现Filter接口并配置到FilterChain中,实现特定的...

    mina 多路分离解码

    2. 在解码过滤器中,数据被分割成多个“消息”单元,每个消息对应一个连接。 3. 消息被传递给相应的解码器进行解码,解码器根据协议解析出有意义的信息。 4. 解码后的对象被传递到下一个过滤器,直至到达业务处理...

    websocket+java服务器(mina)

    2. **Filter Chain**:Mina通过过滤器链处理进来的消息。开发者可以自定义过滤器来实现特定功能,如身份验证、数据编码解码等。 3. **ProtocolCodecFactory**:用于将网络数据流转换成应用程序可以理解的对象,以及...

    mina2技术知识

    MINA2(全称:Java Multi-Protocol Infrastructure)是Apache软件基金会的一个开源项目,主要针对网络应用程序开发,尤其适用于创建高性能、高可扩展性的网络服务器。MINA2提供了一个抽象层,允许开发者编写与传输...

    mina2.x开发示例

    在Mina2.x版本中,引入了更多的优化和改进,使得开发过程更为高效。 在Mina2.x开发示例中,通常会涉及到以下几个关键知识点: 1. **I/O模型**:Mina基于NIO(Non-blocking I/O)模型,允许单个线程处理多个连接,...

    mina2核心框架

    7. **完善的文档与社区支持**:MINA2有详细的用户手册和开发者指南,以及活跃的社区支持,帮助开发者解决在实际开发中遇到的问题。 结合“资料_MINA(第三部分)”这个文件,我们可以深入学习MINA2的高级用法、优化...

    mina编解码示例

    mina编解码示例是基于Apache Mina框架的一个实践项目,主要展示了如何在Mina中进行数据的编码和解码操作。Apache Mina是一个高度可扩展的网络通信框架,广泛应用于开发高性能、高并发的网络应用程序,如TCP/IP和UDP...

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    MINA2 教程 socket

    MINA2的核心组件包括`Session`(会话)、`Filter`(过滤器)和`ProtocolCodec`(编码解码器)。`Session`代表了网络连接,负责数据传输;`Filter`用于数据处理,可以添加多个中间件以实现各种功能;`ProtocolCodec`...

    Mina2的文件上传示例

    在Java世界中,Mina(全称:Java Minimal Asynchronous Network Engine)是一个...这种非阻塞I/O模型特别适合处理大量并发上传请求,而Mina2丰富的API和自定义解码器能力则使我们能够根据实际需求定制文件上传流程。

    socket mina测试框架

    - Mina提供了一套简洁、面向对象的API,让开发者可以以面向对象的方式编写网络应用,如定义协议解码器和编码器,以及服务端和客户端的业务处理器。 3. **协议支持**: - Mina框架支持多种网络协议,如TCP/IP、UDP...

    springboot整合mina

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

Global site tag (gtag.js) - Google Analytics