Netty派生缓冲区
参考https://blog.csdn.net/wangjinnan16/article/details/77972113
派生缓冲区
派生缓冲区,也就是创建一个已经存在的缓冲区的视图,可以调用duplicate(),slice(),slice(int, int),
readOnly()和order(ByteOrder)等方法实现。派生缓冲区会产生自己的读写索引和其他标记索引,但是他们共享内部的数据。因为它们共享内部的数据,所以创建派生缓冲是没有什么性能损耗的,而且是比较好的方式,例如你想拥有一个缓冲区的切片。
如果需要复制一个缓冲区,可以使用copy()或copy(int, int)方法。下面的代码展示了怎么获取一个ByteBuf的切片。
Charset utf8 = Charset.forName(“UTF-8“);
//根据给定的字符串内容创建一个ByteBuf
ByteBuf buf = Unpooled.copiedBuffer(“Netty in Action rocks!“, utf8);
//创建ByteBuf的切片,起始位置是0,截止位置是14
ByteBuf sliced = buf.slice(0, 14);
//打印切片内容,正常应该是"Netty in Action"
System.out.println(sliced.toString(utf8);
//修改索引0内容
buf.setByte(0, (byte) ’J’);
//断言会成功,因为他们共享内部的数据,其实修改的就是他们内部指向的共同数据块
assert buf.get(0) == sliced.get(0)
可以发现,切片和原始ByteBuf里面的内容其实是同一块内存区域,
Netty派生缓冲区的更多相关文章
- Netty buffer缓冲区ByteBuf
Netty buffer缓冲区ByteBuf byte 作为网络传输的基本单位,因此数据在网络中进行传输时需要将数据转换成byte进行传输.netty提供了专门的缓冲区byte生成api ByteBu ...
- Netty之缓冲区ByteBuf解读(一)
Netty 在数据传输过程中,会使用缓冲区设计来提高传输效率.虽然,Java 在 NIO 编程中已提供 ByteBuffer 类进行使用,但是在使用过程中,其编码方式相对来说不太友好,也存在一定的不足 ...
- Netty之缓冲区ByteBuf解读(二)
上篇介绍了 ByteBuf 的简单读写操作以及读写指针的基本介绍,本文继续对 ByteBuf 的基本操作进行解读. 读写指针回滚 这里的 demo 例子还是使用上节使用的. ByteBuf buf = ...
- Netty精粹之玩转NIO缓冲区
摘要: 在JAVA NIO相关的组件中,ByteBuffer是除了Selector.Channel之外的另一个很重要的组件,它是直接和Channel打交道的缓冲区,通常场景或是从ByteBuffer写 ...
- Netty源码分析第5章(ByteBuf)---->第3节: 缓冲区分配器
Netty源码分析第五章: ByteBuf 第三节: 缓冲区分配器 缓冲区分配器, 顾明思议就是分配缓冲区的工具, 在netty中, 缓冲区分配器的顶级抽象是接口ByteBufAllocator, 里 ...
- 【Netty】Netty之ByteBuf
一.前言 前面已经学习了Netty中传输部分,现在接着学习Netty中的ByteBuf. 二.ByteBuf 2.1 ByteBuf API 在网络上传输的数据形式为Byte,Java NIO提供了B ...
- Netty 笔记
1.Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端. 2.早期Java API 使用的阻塞函数 // 创建一个新的ServerSocket, ...
- Netty中的Channel之数据冲刷与线程安全(writeAndFlush)
本文首发于本博客,如需转载,请申明出处. GitHub项目地址 InChat 一个轻量级.高效率的支持多端(应用与硬件Iot)的异步网络应用通讯框架 前言 本文预设读者已经了解了一定的Netty基础知 ...
- Netty实战五之ByteBuf
网络数据的基本单位总是字节,Java NIO 提供了ByteBuffer作为它的字节容器,但是其过于复杂且繁琐. Netty的ByteBuffer替代品是ByteBuf,一个强大的实现,即解决了JDK ...
随机推荐
- centos7下kubernetes(4.kubernetes组件)
Kubenetes cluster 由master和node组成 Master是kubenetes的大脑.运行着以下进程:kube-apiserver.kube-scheduler.kube-cont ...
- oracle 多版本
并发控制 concurrency control 数据库提供的函数集合,允许多个人同时访问和修改数据. 锁(lock)是Oracle管理共享数据库资源并发访问并防止并发数据库事务之间“相互干涉”的核心 ...
- UVA129-Krypton Factor(搜索剪枝)
Problem UVA129-Krypton Factor Accept:1959 Submit:10261 Time Limit: 3000 mSec Problem Description 通 ...
- USB知识汇总
概述 通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通 ...
- CPU, PSU, SPU - Oracle Critical Patch Update Terminology Update
It all started in January 2005 with Critical Patch Updates (CPU). Then Patch Set Updates (PSU) were ...
- 水题:P2799 国王的魔镜
思路:简单模拟即可.判断一下是不是回文,是回文看长度是不是偶数.是偶数的话,说明又可能是回文.依次这样处理.但是只要长度为奇数则一定是原来的长度直接输出即可. #include<iostream ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- 关于alter database datafile offline和alter database datafile offline drop 的区别
转: https://blog.csdn.net/killvoon/article/details/46913183 -----------------------2015-07-16-------- ...
- Spring Security(二十一):6.3 Advanced Web Features
6.3.1 Remember-Me Authentication (记住我的身份验证) See the separate Remember-Me chapter for information on ...
- vue-electron脚手架
vue-electron官方文档(中文):https://simulatedgreg.gitbooks.io/electron-vue/content/cnvue-electron官方文档(英文):h ...