netty练习

简介: netty练习

网络上有多条数据发送给服务端,数据之间使用 \n 进行分隔 但由于某种原因这些数据在接收时,被进行了重新组合,例如原始数据有3条为

  • Hello,world\n
  • I'm zhangsan\n
  • How are you?\n

变成了下面的两个 byteBuffer (黏包,半包)

  • Hello,world\nI'm zhangsan\nHo
  • w are you?\n

现在要求你编写程序,将错乱的数据恢复成原始的按 \n 分隔的数据

public static void main(String[] args) { ByteBuffer source = ByteBuffer.allocate(32); //                     11            24 source.put("Hello,world\nI'm zhangsan\nHo".getBytes()); split(source);

source.put("w are you?\nhaha!\n".getBytes());
split(source);

}

private static void split(ByteBuffer source) { source.flip(); int oldLimit = source.limit(); for (int i = 0; i < oldLimit; i++) { if (source.get(i) == '\n') { System.out.println(i); ByteBuffer target = ByteBuffer.allocate(i + 1 - source.position()); // 0 ~ limit source.limit(i + 1); target.put(source); // 从source 读,向 target 写 debugAll(target); source.limit(oldLimit); } } source.compact(); }



目录
相关文章
|
编译器 C++
【C进阶】-- 字符串函数(1)(中)
【C进阶】-- 字符串函数(1)(中)
|
网络协议 前端开发 安全
Netty
Netty
670 1
|
消息中间件 运维 Java
【Log日志】logback.xml动态配置属性值(包括接入的第三方配置)
1如何动态配置Logback的存放路径 我们在开发过程中,会使用到logback.xml 配置来管理日志文件; 比如
|
自然语言处理 IDE 开发工具
通义灵码编程智能体上线,支持Qwen3模型
通义灵码最全使用指南,一键收藏。
128440 31
通义灵码编程智能体上线,支持Qwen3模型
|
监控 安全 Linux
在Linux中,如何使用Puppet进行配置管理?
在Linux中,如何使用Puppet进行配置管理?
Cmake生成指定vs版本的工程文件
本文简单总结了使用 cmake 生成 visual studio 工程文件的过程
|
机器学习/深度学习
【题解】—— LeetCode一周小结22
LeetCode每日一道一周小结22
79 7
|
存储 安全 Java
为什么Netty要造FastThreadLocal?
Netty 的 FastThreadLocal 是一种高效的线程局部变量,设计用于解决标准 ThreadLocal 的性能和内存泄漏问题。FastThreadLocal 通过使用数组而非哈希表存储数据,避免了哈希冲突带来的性能损耗,查询效率达到 O(1)。此外,FastThreadLocal 提供了 remove() 方法和 FastThreadLocalRunnable 类,以防止内存泄漏,确保在执行完成后自动清理对象。相比于 ThreadLocal,FastThreadLocal 具有更高的性能和安全性。
200 1
|
存储 运维 监控
使用jvisualvm配合Visual GC插件监控Java程序详细总结
本节将会介绍一下jvisualvm的特性及作用、各个功能是如何使用的、最后会介绍jvisualvm的插件Visual GC的安装及使用
使用jvisualvm配合Visual GC插件监控Java程序详细总结
|
存储 Java API
Netty指南
Netty指南
290 2