ByteBuffer模拟拆包输出消息字符串

以下代码模拟网络编程中的粘包现象,用\n进行分割消息块

源码

 public static void main(String[] args) {ByteBuffer byteBuffer1 =ByteBuffer.allocate(60) ;byteBuffer1.put("Hello World\nWhat is you name?\nI am Licky!\nHo".getBytes());splice(byteBuffer1);byteBuffer1.put("w old are you\nI am ten ".getBytes());splice(byteBuffer1);byteBuffer1.put("year`s old!\n".getBytes());splice(byteBuffer1);}public static void splice(ByteBuffer byteBuffer) {byteBuffer.flip();//开启读取模式ByteBufferUtil.debugAll("byteBuffer.flip()", byteBuffer);for (int i = 0; i < byteBuffer.limit(); i++) {if (byteBuffer.get(i) == '\n') {int size = i + 1 - byteBuffer.position();ByteBuffer newByteBuffer = ByteBuffer.allocate(size);for (int i1 = 0; i1 < size; i1++) {newByteBuffer.put(byteBuffer.get());}ByteBufferUtil.debugAll("println", byteBuffer);System.out.println("拆包输出:"+new String(newByteBuffer.array()));}}byteBuffer.compact();ByteBufferUtil.debugAll("compact()", byteBuffer);}

输出结果

在这里插入图片描述

源码分析1

在这里插入图片描述

1.输出完整字符串 Hello World\nWhat is you name?\nI am Licky!\nHo

2.由于遍历获取到了\n字符,将从0开始到\n字符之间的字节数据读取出来填入新的ByteBuffer之中,因为用的get()方法读取,所以更改了position坐标位置

3.输出局部变量newByteBuffer的参数值

4.同步骤2

5.同步骤3

6.同步骤2

7.同步骤3

源码分析2

在这里插入图片描述

步骤1.将上一步骤末尾的两字节Ho放在ByteBuffer最开始的坐标索引

步骤2.追加字符w old are you\nI am ten

步骤3.重置读取索引坐标position

步骤4.由于遍历获取到了\n字符,将从0开始到\n字符之间的字节数据读取出来填入新的ByteBuffer之中,因为用的get()方法读取,所以更改了position坐标位置

步骤5.输出局部变量newByteBuffer的参数值

步骤6.将末尾的字符串I am ten放在ByteBuffer最开始的坐标索引

源码分析3

在这里插入图片描述

步骤1.将上一步骤末尾的两字节Ho放在ByteBuffer最开始的坐标索引,追加字符year``s old!

步骤2.由于遍历获取到了\n字符,将从0开始到\n字符之间的字节数据读取出来填入新的ByteBuffer之中,因为用的get()方法读取,所以更改了position坐标位置

步骤3.字符已经完整输出,position坐标变成0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成都睿明智科技有限公司怎么样可靠不?

在这个日新月异的数字时代&#xff0c;电商行业如同一股不可阻挡的洪流&#xff0c;席卷着每一个消费者的生活。而抖音&#xff0c;作为短视频与电商完美融合的典范&#xff0c;更是为无数商家开辟了一片全新的蓝海。在这片充满机遇与挑战的海洋中&#xff0c;成都睿明智科技有…

【计算机网络】多路转接之epoll

epoll也是一种linux中的多路转接方案(epoll也是只负责IO过程中的"等") 一、epoll相关接口的使用 1.epoll_create int epoll_create(int size); ​功能&#xff1a;创建一个epoll模型 ① int size&#xff1a;没意义了 >0就行 返回值&#xff1a;返回一个文件…

虚拟机上搭建达梦DSC简略步骤

vmware 17 centos 7.6 达梦 dm8_20240920_x86_rh7_64.iso cd /d C:\Program Files (x86)\VMware\VMware Workstation\.\vmware-vdiskmanager.exe -c -s 100MB -a lsilogic -t 2 "F:\vm\dmdsc\sharedisk\share-dcr.vmdk" .\vmware-vdiskmanager.exe -c -s 100MB -a l…

Linux高阶——1117—TCP客户端服务端

目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…

【SVN和GIT】版本控制系统详细下载使用教程

文章目录 ** 参考文章一、什么是SVN和GIT二、软件使用介绍1 SVN安装1.1 服务端SVN下载地址1.2 客户端SVN下载地址2 SVN使用2.1 服务端SVN基础使用2.1.1 创建存储库和用户成员2.1.2 为存储库添加访问人员2.2 客户端SVN基础使用2.2.1 在本地下载库中的内容2.2.2 版本文件操作--更…

【含文档】基于django+Vue的荣誉证书管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 主要技术: django,mysql,vue 2.视频演示地址 3.功能 系统定义了三个角色&#xff1a;管理员和学生和教师。 管理员进…

ros2学习日记_241124_ros相关链接

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

AIGC-------AIGC在社交媒体内容生成中的应用

AIGC在社交媒体内容生成中的应用 引言 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;社交媒体平台上的内容创作方式发生了巨大变化。AIGC使得内容创作的门槛大大降低&#xff0c;从而让更多的人能够参与到社交媒体内容的创作中&#xff0c;同时也使…

GWO-SVMD分解 | Matlab实现GWO-SVMD灰狼算法优化逐次变分模态分解

GWO-SVMD分解 | Matlab实现GWO-SVMD灰狼算法优化逐次变分模态分解 目录 GWO-SVMD分解 | Matlab实现GWO-SVMD灰狼算法优化逐次变分模态分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GWO-SVMD灰狼算法优化逐次变分模态分解 内有15种用以优化svmd的适应度函数&#…

《C++智能合约与区块链底层交互全解析:构建坚实的去中心化应用桥梁》

在区块链技术的广阔天地里&#xff0c;C智能合约扮演着极为关键的角色&#xff0c;而其与区块链底层的交互则是实现各种去中心化应用功能的核心环节。深入理解并掌握这种交互机制&#xff0c;对于区块链开发者来说至关重要&#xff0c;它犹如一座桥梁&#xff0c;将智能合约的业…

意识与人工智能:德国语言学家Joscha Bach的“梦境意识”理论探讨

引言 在人类的科学探索中&#xff0c;意识无疑是最深奥的未解之谜之一。尽管我们可以清晰地感知到自己的存在和思维&#xff0c;但意识究竟是什么&#xff1f;它从何而来&#xff1f;是否是物理世界的产物&#xff1f;以及人工智能是否能拥有意识&#xff1f;这些问题一直困扰…

PHP导出EXCEL含合计行,设置单元格格式

PHP导出EXCEL含合计行&#xff0c;设置单元格格式&#xff0c;水平居中 垂直居中 public function exportSalary(Request $request){//水平居中 垂直居中$styleArray [alignment > [horizontal > Alignment::HORIZONTAL_CENTER,vertical > Alignment::VERTICAL_CE…

ESP32学习笔记_FreeRTOS(2)——Queue

摘要(From AI): 在嵌入式系统开发中&#xff0c;任务之间的高效通信是实现多任务协作的关键。FreeRTOS 提供了强大的队列机制&#xff0c;支持任务之间安全、灵活地传递数据&#xff0c;是实现任务同步和事件通知的核心工具。本篇博客将全面解析 FreeRTOS 队列的工作原理和应用…

Android Binder技术概览

Android中的Binder是一种基于远程过程调用&#xff08;Remote Procedure Call, RPC&#xff09;的轻量级通信机制&#xff0c;核心用于 Android 系统中的进程间通信&#xff08;Inter-Process Communication, IPC&#xff09;。Binder 是 Android 系统中不可或缺的一部分&#…

MySQL学习入门

好的&#xff01;以下是一个详细的 MySQL 入门学习文档&#xff0c;针对 Python 开发者&#xff0c;包含使用 SQLite 进行学习的示例。文档将涵盖实际开发中需要使用的各种相关操作和知识&#xff0c;帮助您从基础开始&#xff0c;逐步掌握在 Python 中使用 MySQL 的技能。 MyS…

AI模型---安装cuda与cuDNN

1.安装cuda 先打开cmd 输入nvidia-smi 查看显卡支持cuda对应的版本&#xff1a; 然后去英伟达官网下载cuda&#xff08;外网多刷几次&#xff09; https://developer.nvidia.com/cuda-toolkit-archive 注意对应版本 安装过程中如果显示如下图&#xff1a; 请安装visual Stu…

大数据背景下信息通信网络安全管理管理策略研究

摘要&#xff1a; 在互联网以及计算机技术的支持下我国已经进入了大数据时代&#xff0c;各行各业在发展的进程之中更多的借助云计算技术慢慢完成了信息发展。在信息化发展的进程中&#xff0c;因为网络的开放性&#xff0c;促使信息通信网络安全工作面临一定危胁&#xff0c;安…

ajax (一)

什么是 AJAX [ˈeɪdʒks] &#xff1f; 概念&#xff1a;AJAX是浏览器与服务器进行 数据通信 的技术&#xff0c;动态数据交互 怎么用AJAX? 1. 先使用 axios [k‘sio ʊ s] 库&#xff0c; 与服务器进行 数据通信 ⚫ 基于 XMLHttpRequest 封装、代码简单、月下载量在 1…

k8s rainbond centos7/win10 -20241124

参考 https://www.rainbond.com/ 国内一站式云原生平台 对centos7环境支持不太行 [lighthouseVM-16-5-centos ~]$ curl -o install.sh https://get.rainbond.com && bash ./install.sh 2024-11-24 09:56:57 ERROR: Ops! Docker daemon is not running. Start docke…

使用 Maven 开发 IntelliJ IDEA 插件

使用 Maven 开发 IntelliJ IDEA 插件的完整流程 1. 创建 Maven 项目 1.1 使用 IntelliJ 创建 Maven 项目 打开 IntelliJ IDEA&#xff0c;点击 File > New > Project。选择 Maven&#xff0c;填写项目名称和 GroupId&#xff0c;例如&#xff1a; GroupId: com.exampl…