- 浏览: 352394 次
- 性别:
- 来自: 成都正在项目
文章分类
- 全部博客 (121)
- Java-Spring (1)
- Java-Hibernate (5)
- Java-基础 (16)
- Java-中级 (1)
- Java-高级 (18)
- Java-Struts (0)
- Java-RCP/Swing/SWT/JFACE (1)
- Java-常用正则 (1)
- Java-反射 (2)
- Java-h2database (2)
- JAVA面试题目 (1)
- ArcGIS Desktop 10——安装篇 (2)
- ArcGIS Desktop 10——基本知识 (0)
- ArcGIS Desktop 10——专业库——数据管理 (9)
- PHP——安装篇 (3)
- PHP——基础篇 (2)
- PHP——教程笔记 (10)
- GIS——基础 (3)
- GIS——算法 (0)
- GIS——Geoserver (1)
- GIS——OpenLayers (1)
- C#——既然改成了ITEYE我就增加个栏目 (1)
- Oracle——PL/SQL (1)
- Oracle——Java基础 (2)
- Oracle——TOAD (1)
- ECLIPSE-MYECLIPSE常见问题 (3)
- MySQL——安装篇 (4)
- Postgres (5)
- JavaScript - JQUERY (2)
- C++ (2)
- 操作系统 (5)
- Dwr——DirectWebRemoting (5)
- Maven (1)
- FLEX (4)
- ruby (1)
最新评论
-
AXthrough:
好强大,支持。
解决Jquery.autocomplete.js多参数的正确传递+中文编码+发送兼容FF+空格问题+返回值 -
redsky008:
独立的程序,独立的路径。
我已经转行了,以后这个很少关注的了 ...
真正解决 log4j:ERROR Failed to rename错误解决办法 -
梅花簪:
没明白,怎么改配置,为不同的进程所有?
真正解决 log4j:ERROR Failed to rename错误解决办法
转自: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区分一下)
模拟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区分一下)
发表评论
-
RESTEasy 例子 hello world(两种方法)
2012-12-14 17:41 21871转载自http://zorro.blog.51cto.com/ ... -
原来Junit不支持多线程测试,需要使用GroboUtils才可以支持多线程测试
2011-12-06 09:30 1956对Junit的不深刻理解,造成多线程执行不完整,比如执行100 ... -
java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloa
2011-07-29 10:07 1275在做RESTful测试时,在Windows系统下出现了如下问题 ... -
转:Mina2 Http server
2011-07-27 14:03 1049http://amozon.iteye.com/blog/32 ... -
Base64测试
2011-06-29 17:36 1package com.redsky.cn.test; ... -
转Java集群好网站
2011-06-28 22:11 719http://www.jdon.com/jivejdon/th ... -
转:常见NIO开源框架(MINA、xSocket)学习 2
2011-06-23 18:17 843http://unbounder.iteye.com/blog ... -
test
2011-06-23 16:50 547http://www.liuyangs.info/docume ... -
转:直接用socket的话,mina server就不能用filter
2011-06-23 16:00 1转:http://www.blogjava.net/cresp ... -
转Java NIO文件操作
2011-06-21 13:54 910http://download.csdn.net/source ... -
搜集的一篇OutOfMemoryError
2011-06-10 23:29 1972最近遇到如下问题,主要是在做线程池+数据库连接池时遇到的,虽然 ... -
另一个线程池ThreadPool,感觉比之前发的那个JDK自带的好用
2011-06-10 22:52 2252import java.util.LinkedList; p ... -
转载Socket解包
2011-05-31 20:04 1843http://liuyuyuan.iteye.com/blog ... -
Java解决常见验证码——一定是准确率100%
2011-05-28 21:30 1147绝对不适合于严重扭曲,形状交叉的情形。有别于传统切图(一般4张 ... -
Mina2和Spring(2.5)在web项目中的结合使用
2011-05-18 20:55 790转载http://yanda20056.blog.163.co ... -
学习动态代理的时候,原来JAVA代码中也可以编译代码执行JAVAC的功能啊
2011-05-04 22:37 1027JDK1.6提供了如题的功能,前提是项目必须引入JDK1.6而 ... -
关于Map接口中Key值是对象还是值的问题
2011-04-28 19:24 3656今天遇到取不出Key所对应的值,取值为null. 原来是Key ... -
深度克隆对象
2011-04-28 15:10 1031必须将对象序列和反序列, 而且尤其在多线程中要引用多个对象,而 ... -
转载:JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
2011-04-28 15:04 816将封装的如下方法置顶 public static Thr ...
相关推荐
- 编解码器是mina中的核心组件,分为编码器(Encoder)和解码器(Decoder)两部分,分别处理数据的编码和解码过程。 - 编码器将应用对象转化为ByteBuffer,以便于网络传输;解码器则将接收到的ByteBuffer还原为...
在`mina src`压缩包中,可能包含MINA框架的源代码,你可以通过阅读这些源码来深入理解MINA的工作原理,特别是过滤器和解码器的实现。这对于学习MINA、理解和定制自己的网络服务非常有帮助。同时,结合提供的博客链接...
本文将深入探讨如何在Mina中自定义编码解码器,这对于实现特定的网络通信协议至关重要。 首先,了解Mina的编码解码器架构是必要的。Mina使用了Chain of Responsibility设计模式,通过Filter链来处理进来的数据。...
在本文中,我们将深入探讨MINA框架中的编解码器(Codec)概念,并通过提供的`mina_server`和`minaclient`两个文件夹中的示例,来理解其工作原理。 MINA框架的核心在于它的异步I/O模型,它允许开发者以非阻塞的方式...
* 编解码器的使用:TextLineCodecFactory * 异常处理机制:IOException 五、Mina2.0 框架源码剖析(三) Mina2.0 框架源码剖析(三)主要包括了解 Mina2.0 的会话管理、会话超时机制、idle 机制等。 知识点: * ...
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利...当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供)。
根据提供的信息,我们可以详细解析与"Mina2中文文档"相关的各个关键知识点: ### Mina2中文文档概述 #### Introduction Mina2是一个基于NIO(Non-blocking I/O)的高效网络通信框架,由Apache软件基金会维护。该...
2. **Filter**:过滤器是Mina中的重要概念,它允许我们对网络通信的数据进行处理。开发者可以定义多个过滤器,每个过滤器可以执行特定的操作,如数据编码、解码或安全检查。过滤器链的概念使得我们可以按顺序处理...
3. **Filter机制**:MINA2的过滤器机制允许用户插入自定义处理逻辑,这些过滤器按照预设顺序执行,可以用于数据编码解码、安全处理、日志记录等。开发者可以通过实现Filter接口并配置到FilterChain中,实现特定的...
2. 在解码过滤器中,数据被分割成多个“消息”单元,每个消息对应一个连接。 3. 消息被传递给相应的解码器进行解码,解码器根据协议解析出有意义的信息。 4. 解码后的对象被传递到下一个过滤器,直至到达业务处理...
2. **Filter Chain**:Mina通过过滤器链处理进来的消息。开发者可以自定义过滤器来实现特定功能,如身份验证、数据编码解码等。 3. **ProtocolCodecFactory**:用于将网络数据流转换成应用程序可以理解的对象,以及...
MINA2(全称:Java Multi-Protocol Infrastructure)是Apache软件基金会的一个开源项目,主要针对网络应用程序开发,尤其适用于创建高性能、高可扩展性的网络服务器。MINA2提供了一个抽象层,允许开发者编写与传输...
在Mina2.x版本中,引入了更多的优化和改进,使得开发过程更为高效。 在Mina2.x开发示例中,通常会涉及到以下几个关键知识点: 1. **I/O模型**:Mina基于NIO(Non-blocking I/O)模型,允许单个线程处理多个连接,...
7. **完善的文档与社区支持**:MINA2有详细的用户手册和开发者指南,以及活跃的社区支持,帮助开发者解决在实际开发中遇到的问题。 结合“资料_MINA(第三部分)”这个文件,我们可以深入学习MINA2的高级用法、优化...
mina编解码示例是基于Apache Mina框架的一个实践项目,主要展示了如何在Mina中进行数据的编码和解码操作。Apache Mina是一个高度可扩展的网络通信框架,广泛应用于开发高性能、高并发的网络应用程序,如TCP/IP和UDP...
Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...
MINA2的核心组件包括`Session`(会话)、`Filter`(过滤器)和`ProtocolCodec`(编码解码器)。`Session`代表了网络连接,负责数据传输;`Filter`用于数据处理,可以添加多个中间件以实现各种功能;`ProtocolCodec`...
在Java世界中,Mina(全称:Java Minimal Asynchronous Network Engine)是一个...这种非阻塞I/O模型特别适合处理大量并发上传请求,而Mina2丰富的API和自定义解码器能力则使我们能够根据实际需求定制文件上传流程。
- Mina提供了一套简洁、面向对象的API,让开发者可以以面向对象的方式编写网络应用,如定义协议解码器和编码器,以及服务端和客户端的业务处理器。 3. **协议支持**: - Mina框架支持多种网络协议,如TCP/IP、UDP...
下面我们将详细讨论如何在SpringBoot项目中整合Mina,并自定义解码器。 首先,我们需要在SpringBoot项目中添加Mina的相关依赖。这通常通过在`pom.xml`或`build.gradle`文件中引入Mina的依赖项来完成。对于Maven用户...