zoukankan      html  css  js  c++  java
  • netty自定义解码器

    在socket传输通信中容易丢包问题,什么半包问题,这些都是很正常的问题,处理方法就是定义自己的编解码规则了,让每次接收按定义好的规则为一个完整包作为数据源即可。

    下面个例子就是netty自定义的一个解码器:

     1 import io.netty.buffer.ByteBuf;
     2 import io.netty.buffer.ByteBufAllocator;
     3 import io.netty.channel.ChannelHandlerContext;
     4 import io.netty.handler.codec.ByteToMessageDecoder;
     5 import java.util.List;
     6  
     7 public class XmlDecoder extends ByteToMessageDecoder {
     8  
     9     String lastStr = "";
    10  
    11     @Override
    12     protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
    13         System.out.println("解码器:");
    14         int len = in.readableBytes();
    15         if (len < 1) return;
    16         byte[] bytes = new byte[len];
    17         in.getBytes(0, bytes);
    18         String temp = new String(bytes);
    19       //这里为XML结束标签,自行替换
    20         int index = temp.indexOf("</body>");
    21         if (index == -1) {
    22             lastStr += temp;
    23         } else {
    24             lastStr += temp.substring(0, index+14 );
    25             ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer();
    26             buffer.writeBytes(lastStr.getBytes());
    27             out.add(buffer);
    28             lastStr = "";
    29         }
    30         in.skipBytes(len);
    31     }
    32     
    33 }
  • 相关阅读:
    在vim中不能用鼠标右键粘贴和跨系统复制粘贴的解决办法
    2、cat
    OTG相关知识
    vim报错E325(出现.swp文件)地解决方法
    Linux命令1
    数组与集合
    if switch for while
    各类运算符
    java基础概念
    基于对话框的程序隐藏于托盘(二)
  • 原文地址:https://www.cnblogs.com/huzi007/p/11334178.html
Copyright © 2011-2022 走看看