栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

带你理解netty中 粘包 半包的处理方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带你理解netty中 粘包 半包的处理方法

我们在网络编程中,处理粘包,半包是避免不了的问题,那今天就有一个小例子,带大家了解下netty中粘包,半包的处理方法:

题目:
客户端输入一段内容:

  1. hello wordn
  2. I‘m zhangsann
  3. How are you?n

变成了下面两个bytebuf

  1. hello wordnI’m zhangsannHo
  2. w are you?n

现在要求编写程序,将错乱的数据恢复到原始按n分割的数据

输入数据样例:

ByteBuffer source = ByteBuffer.allocate(32);
source.put("hello wordnI'm zhangsannHo".getBytes());
split(source);
source.put("w are you?n".getBytes());
split(source);

输出代码:

public class NettySpilt {

    public static void main(String[] args) {
        ByteBuffer source = ByteBuffer.allocate(32);
        source.put("hello wordnI'm zhangsannHo".getBytes());
        split(source);
        source.put("w are you?n".getBytes());
        split(source);
    }

    private static void split(ByteBuffer source) {
        //切换到读模式
        source.flip();
        for (int i = 0; i < source.limit(); i++) {
            //如果找到'n',将前面保存至target内
            if (source.get(i) == 'n') {
                int length = i + 1 - source.position();
                ByteBuffer target = ByteBuffer.allocate(length);
                for (int j = 0; j < length; j++) {
                    target.put(source.get(j));
                }
            }
        }
        source.compact();
    }

}
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号