自定义Mina中的拦截器
来源:互联网 发布:windows 机顶盒 编辑:程序博客网 时间:2024/04/30 07:57
package com.socket.server;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 MyTextLineFactory implements ProtocolCodecFactory{private MyTextLineEncoder mEncoder;private MyTextLIneDecoder mDecoder;public MyTextLineFactory(){ mDecoder = new MyTextLIneDecoder(); mEncoder = new MyTextLineEncoder();} @Override public ProtocolDecoder getDecoder(IoSession arg0) throws Exception { //解释器,用于解密 return mDecoder; } @Override public ProtocolEncoder getEncoder(IoSession arg0) throws Exception { // 编译器,用于加密 return mEncoder; }}
编码类MyTextLineEncoder
package com.socket.server;import java.nio.charset.Charset;import java.nio.charset.CharsetEncoder;import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;import org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolEncoder;import org.apache.mina.filter.codec.ProtocolEncoderOutput;public class MyTextLineEncoder implements ProtocolEncoder{//加密类 @Override public void dispose(IoSession arg0) throws Exception { // TODO Auto-generated method stub } @Override public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { //接收的是message String s = null; if(message instanceof String){ s= (String)message; } if(s != null){ CharsetEncoder charsetEncoder = (CharsetEncoder) session.getAttribute("encoder"); //每次获取系统的编码会耗费时间,把编码的类型保存到encoder中,每次在encoder中读取 if(charsetEncoder==null){ //如果没有数据 Charset.defaultCharset().newEncoder();//获取系统默认的编码方式 赋值 session.setAttribute("encoder", charsetEncoder); //把数据添加到encoder中 } IoBuffer ioBuffer =IoBuffer.allocate(s.length()); //开辟内存的,大小用字符串来判断 ioBuffer.setAutoExpand(true); //开辟大内存大小不仅仅局限于先开辟的大小,自动适应 ioBuffer.putString(s, charsetEncoder); //发送什么数据就put什么数据的类型,发送String数据,使用putString来发送,第一个参数是数据,第二个参数是编码类型 基本使用utf-8; ioBuffer.flip(); out.write(ioBuffer);//写出iobuffer } }}解释类MyTextLIneDecoder
package com.socket.server;import org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolDecoder;import org.apache.mina.filter.codec.ProtocolDecoderOutput;public class MyTextLIneDecoder implements ProtocolDecoder {//解密类 @Override public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { int startPosition = in.position();//记录读取位置 while(in.hasRemaining()){ //读取数据 byte b = in.get(); if(b == '\n') { //表示读取了一行,读取结束 int currentposition = in.position(); //记录当前位置 int limit = in.limit(); //读取当前行数 in.position(startPosition); //定位到一开始的位置 in.limit(currentposition);//定位到终点的位置 IoBuffer buffer= in.slice(); //截取一行位置 byte[] dest = new byte[buffer.limit()]; //把二进制数据转换到字节数组中 buffer.get(dest); String str = new String(dest); //字节数组转换成String out.write(str);//写出数据 in.position(currentposition); //还原位置 开始的位置 in.limit(limit); //开始的行数 } } } @Override public void dispose(IoSession arg0) throws Exception { // TODO Auto-generated method stub } @Override public void finishDecode(IoSession arg0, ProtocolDecoderOutput arg1) throws Exception { // TODO Auto-generated method stub }}
1 0
- 自定义Mina中的拦截器
- struts2中的自定义拦截器
- Mina的拦截器FilterChain
- Struts中的拦截器以及自定义拦截器
- struts2---中的自定义拦截器(16)
- 自定义注解在拦截器中的应用
- 自定义拦截器获取不到action中的数据
- struts2 自定义拦截器
- 自定义拦截器(转)
- Struts2自定义拦截器
- 自定义拦截器
- Struts2自定义拦截器
- strust2自定义拦截器
- 自定义时间拦截器
- struts2自定义拦截器
- Struts2自定义拦截器
- 拦截器(自定义)
- Struts2自定义拦截器
- 2016年英语学习——1月
- java中常用的字符串的截取方法
- 3Sum Closest题解
- 找出升序数组中和为给定值的两个数字 不要直接用形参里的表示,输出或清零输入时都是大忌
- hdu 4858 项目管理(图的分治)
- 自定义Mina中的拦截器
- 华夏神农实习总结
- sync 接口返回的内容
- 【安卓开发】JNI常用接口 - 2
- eclipse luna 集成weblogic
- 程序人生名言
- 可重入和线程安全
- 开源协议
- Java入门基础篇之运算符(综合应用实例)