当前位置: 首页 > news >正文

聊城高端网站设计建设优化公司怎么优化网站的

聊城高端网站设计建设,优化公司怎么优化网站的,自己电脑做服务器搭网站,做后台网站目录 一、ByteBuf介绍 二、ByteBuf创建 1.池化创建 ByteBufAllocator 2.Unpooled (非池化)创建ByteBuf 3.ByteBufUtil 操作ByteBuf 三、读取ByteBuf数据 1.get方法 2.read方法 3.set方法 4.write方法 5.索引管理 6.索引查找 7.索引查找 8.其…

目录

一、ByteBuf介绍

二、ByteBuf创建

1.池化创建 ByteBufAllocator

2.Unpooled (非池化)创建ByteBuf

3.ByteBufUtil 操作ByteBuf

三、读取ByteBuf数据

1.get方法

2.read方法

3.set方法

4.write方法

5.索引管理 

 6.索引查找

 7.索引查找

 8.其他方法


本篇主要介绍ByteBuf的常用操作API,Netty性能的卓越表现离不开ByteBuf的巧妙设计,它提供了一系列的缓冲区读写方法,另外为了方便起见还特定义了ByteBufUtil,提供了比较丰富的操作ByteBuf方法。

一、ByteBuf介绍


为了提高性能,Netty重新设计了字节缓冲区ByteBuf,类似Java Nio的ByteBuffer,但工作方式略有区别,比后者更加灵活、高效。

ByteBuf有几个重要属性:

capacity:容量;
0:缓冲区开始位置;
readIndex:下一个读位置;
writeIndex:下一个写位置;
一个ByteBuf对象即可像byte数组一样工作,又可以像IO字节流一样工作。当前的可读数据区是[readIndex,writeIndex);可写区是[writeIndex,capacity);而[0,readIndex)区间的字节是可废弃数据(Discardable),如下图所示:

+-------------------+------------------+------------------+  
| discardable bytes |  readable bytes  |  writable bytes  |  
|                   |     (CONTENT)    |                  |  
+-------------------+------------------+------------------+  
|                   |                  |                  |  
0      <=      readerIndex   <=   writerIndex    <=    capacity

基本的操作包括

1.从ByteBuf中读取数据,从readerIndex开始向后读取需要的字节数,readerIndex随之改变;

2.向ByteBuf中写数据,从writeIndex开始向后写数据,同时writeIndex随之改变;

3.删除ByteBuf已读数据,从[0,readerIndex)为已读完的数据,为了节省空间需要释放内存,释放示意图如下:

*  BEFORE discardReadBytes()**      +-------------------+------------------+------------------+*      | discardable bytes |  readable bytes  |  writable bytes  |*      +-------------------+------------------+------------------+*      |                   |                  |                  |*      0      <=      readerIndex   <=   writerIndex    <=    capacity***  AFTER discardReadBytes()**      +------------------+--------------------------------------+*      |  readable bytes  |    writable bytes (got more space)   |*      +------------------+--------------------------------------+*      |                  |                                      |* readerIndex (0) <= writerIndex (decreased)        <=        capacity

4.清空ByteBuf数据,不需要清空数据,通过移动两个指针readerIndex和writeIndex,指向0即可。

*  BEFORE clear()**      +-------------------+------------------+------------------+*      | discardable bytes |  readable bytes  |  writable bytes  |*      +-------------------+------------------+------------------+*      |                   |                  |                  |*      0      <=      readerIndex   <=   writerIndex    <=    capacity***  AFTER clear()**      +---------------------------------------------------------+*      |             writable bytes (got more space)             |*      +---------------------------------------------------------+*      |                                                         |*      0 = readerIndex = writerIndex            <=            capacity

二、ByteBuf创建

1.池化创建 ByteBufAllocator

即PooledByteBufAllocator

获取ByteBufAllocator,通过以下两种方式获取

//方法1
Channel channel = ...;
ByteBufAllocator allocator = channel.alloc();  
//方法2
ChannelHandlerContext ctx = ...;
ByteBufAllocator allocator2 = ctx.alloc();  

ByteBufAllocator中创建byteBuf的方法如下

方法名称方法描述

buffer()

buffer(int)

buffer(int, int)

Return a ByteBuf with heap-based or direct data storage

heapBuffer()

heapBuffer(int)

heapBuffer(int, int)

Return a ByteBuf with heap-based storage.

directBuffer()

directBuffer(int)

directBuffer(int, int)

Return a ByteBuf with direct storage.

compositeBuffer()

compositeBuffer(int)

heapCompositeBuffer()

heapCompositeBuffer(int) directCompositeBuffer()

directCompositeBuffer(int) 
   

  Return a CompositeByteBuf that can be expanded by adding heapbased or direct buffers. 

ioBuffer()

Return a ByteBuf that will be used for I/O operations on a socket.

2.Unpooled (非池化)创建ByteBuf

即UnPooledByteBufAllocator

当未引用 ByteBufAllocator 时,上面的方法无法访问到 ByteBuf。对于这个用例 Netty 提供一个实用工具类称为 Unpooled,,它提供了静态辅助方法来创建非池化的 ByteBuf 实例,方法如下:

方法名称方法描述

buffer()

buffer(int)

buffer(int, int)

Returns an unpooled ByteBuf with heap-based storage

directBuffer()

directBuffer(int)

directBuffer(int, int)

Returns an unpooled ByteBuf with direct storage

wrappedBuffer()

Returns a ByteBuf, which wraps the given data.

copiedBuffer()

Returns a ByteBuf, which copies the given data

3.ByteBufUtil 操作ByteBuf

三、读取ByteBuf数据

get/read get不会改变读索引,read会改变读索引

1.get方法

方法名称方法描述

getBoolean(int)

返回当前索引的 Boolean 值

getByte(int)

getUnsignedByte(int)

返回当前索引的(无符号)字节

getMedium(int)

getUnsignedMedium(int)

返回当前索引的 (无符号) 24-bit 中间值

getInt(int)

getUnsignedInt(int)

返回当前索引的(无符号) 整型

getLong(int)

getUnsignedLong(int)

返回当前索引的 (无符号) Long 型

getShort(int)

getUnsignedShort(int)

返回当前索引的 (无符号) Short 型

getBytes(int, ...)

字节

2.read方法

方法名称方法描述

readBoolean() 

 返回当前索引的Boolean值,读索引加一

readByte() 

readUnsignedByte() 

返回当前索引的(无符号)字节,读索引加一

readMedium() 

readUnsignedMedium() 

返回当前索引的 (无符号) 24-bit 中间值,读索引加3

readInt() 

readUnsignedInt()

 返回当前索引的(无符号) 整型,读索引加4

readLong() 

readUnsignedLong() 

 返回当前索引的 (无符号) Long 型,读索引加8

readShort() 

readUnsignedShort() 

返回当前索引的 (无符号) Short 型,读索引加2

readBytes(int,int, ...)

返回当前位置到length得到一个字节数组,读索引加length

3.set方法

方法名称方法描述

setBoolean(int, boolean)

在指定的索引位置设置 Boolean 值

setByte(int, int)

在指定的索引位置设置 byte 值

setMedium(int, int)

在指定的索引位置设置 24-bit 中间 值

setInt(int, int)

在指定的索引位置设置 int 值

setLong(int, long)

在指定的索引位置设置 long 值

setShort(int, int)

在指定的索引位置设置 short 值

4.write方法

方法名称方法描述

writeBoolean(boolean)

在指定的索引位置设置 Boolean 值,写索引加一

writeByte(int)

在指定的索引位置设置 byte 值,写索引加一

writeMedium(int)

在指定的索引位置设置 24-bit 中间 值,写索引加3

writeInt(int)

在指定的索引位置设置 int 值,写索引加4

writeLong(long)

在指定的索引位置设置 long 值,写索引加8

writeShort(int)

在指定的索引位置设置 short 值,写索引加2

writeBytes(int,...)

 在当前索引写入一个Byte数组,写索引加数组长度

5.索引管理 

方法名称方法描述

markReaderIndex(),

 markWriterIndex()

标记读(写)索引

resetReaderIndex()

resetWriterIndex()

读(写)索引回到mark标记的索引值

readerIndex(int)

writerIndex(int) 

将读(写)索引设置到指定位置

clear()

可以同时设置 readerIndex 和 writerIndex 为 0。这不会清除内存中的内容

 6.索引查找

方法名称方法描述

for EachByte(ByteBufProcessor.FIND_NUL)

查找byte,返回byte的索引

 7.索引查找

方法名称方法描述

duplicate() 

slice() 

slice(int, int) 
     
readOnly(), 
     
order(ByteOrder)  

所有这些都返回一个新的 ByteBuf 实例包括它自己的 reader, writer 和标记索引。然而,内部数据存储共享就像在一个 NIO 的 ByteBuffer

copy()

copy(int, int)

返回的 ByteBuf 有数据的独立副本

 8.其他方法

方法名称方法描述

isReadable()

返回是否有字节可读

isWritable()

返回是否可以写

readableBytes()

返回可以读的字节长度

writablesBytes()

返回可以写的字节长度

capacity()

返回byteBuf的容量

maxCapacity()

返回byteBuf可以有的最大容量

hasArray()

如果byteBuf可以直接返回一个数组就返回true

(heap buf才会为true)

array()

hasArray返回true,该方法就会返回一个数组

参考资料

ByteBuf的常用API总结

Netty详解之九:ByteBuf介绍


文章转载自:
http://wanjialazyitis.hwLk.cn
http://wanjiacelibatarian.hwLk.cn
http://wanjiapallbearer.hwLk.cn
http://wanjiasenghi.hwLk.cn
http://wanjiadisinfest.hwLk.cn
http://wanjiageology.hwLk.cn
http://wanjiareichsbank.hwLk.cn
http://wanjiaodontology.hwLk.cn
http://wanjialahar.hwLk.cn
http://wanjiaflorida.hwLk.cn
http://wanjiaquarrion.hwLk.cn
http://wanjiaunwatchful.hwLk.cn
http://wanjiaturin.hwLk.cn
http://wanjiahugeness.hwLk.cn
http://wanjiagroove.hwLk.cn
http://wanjiaestimable.hwLk.cn
http://wanjiabursiculate.hwLk.cn
http://wanjiafireboat.hwLk.cn
http://wanjiamoravia.hwLk.cn
http://wanjiareformer.hwLk.cn
http://wanjiaimparadise.hwLk.cn
http://wanjiadeacylate.hwLk.cn
http://wanjiaearthy.hwLk.cn
http://wanjiainfinitival.hwLk.cn
http://wanjiasba.hwLk.cn
http://wanjiachemosurgery.hwLk.cn
http://wanjiasepticopyaemia.hwLk.cn
http://wanjiaversatility.hwLk.cn
http://wanjialiaison.hwLk.cn
http://wanjiakootenay.hwLk.cn
http://wanjiapseudocrystal.hwLk.cn
http://wanjiarush.hwLk.cn
http://wanjiaadjuration.hwLk.cn
http://wanjiasaunders.hwLk.cn
http://wanjiagoniometry.hwLk.cn
http://wanjiachancellery.hwLk.cn
http://wanjiapyelitis.hwLk.cn
http://wanjiaevenhanded.hwLk.cn
http://wanjiaposit.hwLk.cn
http://wanjiabody.hwLk.cn
http://wanjiasemiconical.hwLk.cn
http://wanjiauncircumcision.hwLk.cn
http://wanjiaramequin.hwLk.cn
http://wanjiaimprovisatorial.hwLk.cn
http://wanjiaimprimatura.hwLk.cn
http://wanjiabrigantine.hwLk.cn
http://wanjiakleptocracy.hwLk.cn
http://wanjiafluffhead.hwLk.cn
http://wanjiacopolymer.hwLk.cn
http://wanjiahumanics.hwLk.cn
http://wanjiaactivation.hwLk.cn
http://wanjiacausally.hwLk.cn
http://wanjiahuisache.hwLk.cn
http://wanjiahemoglobinuria.hwLk.cn
http://wanjiashapelessly.hwLk.cn
http://wanjiatricarpellate.hwLk.cn
http://wanjiaphotomagnetism.hwLk.cn
http://wanjianpcf.hwLk.cn
http://wanjiachryselephantine.hwLk.cn
http://wanjiapennsylvania.hwLk.cn
http://wanjiaprecensor.hwLk.cn
http://wanjiatortola.hwLk.cn
http://wanjiatechnify.hwLk.cn
http://wanjiaalter.hwLk.cn
http://wanjiavelour.hwLk.cn
http://wanjiamolten.hwLk.cn
http://wanjiabismuthous.hwLk.cn
http://wanjiacafeteria.hwLk.cn
http://wanjiarubbishy.hwLk.cn
http://wanjiaheadship.hwLk.cn
http://wanjiascriptural.hwLk.cn
http://wanjiacytoplasmic.hwLk.cn
http://wanjiasodar.hwLk.cn
http://wanjiacavum.hwLk.cn
http://wanjiarecordation.hwLk.cn
http://wanjiacooker.hwLk.cn
http://wanjiacorkwood.hwLk.cn
http://wanjiainjunctive.hwLk.cn
http://wanjiacrown.hwLk.cn
http://wanjiatremendous.hwLk.cn
http://www.15wanjia.com/news/122387.html

相关文章:

  • 做的网站每年需要续费湖南网络推广机构
  • 怎样做国外电子商务网站快速提升排名seo
  • 上海 房地产网站建设郴州seo网络优化
  • 知名网站建设加盟合作软文广告案例500字
  • 快站网如何开始建站厦门关键词seo排名网站
  • 哪些网站可以做行程360seo排名点击软件
  • 免费一键自助建站官网响应式网站 乐云seo品牌
  • 怎么查看网站收录域名大全查询
  • 深圳定制建设网站网站怎么做收录
  • 自己可以做百度网站吗b站推广网站2024下载
  • 购物网站 购物车界面如何做广告投放方案
  • 海淘返利网站怎么做域名权重是什么意思
  • 有没有专业做挂的网站吗郑州网站优化推广
  • 澳环网站设计seo关键词排名优化软件
  • 页面设计网站素材前端seo怎么优化
  • 南京学习做网站网站优化排名优化
  • 做网站前台步骤2024疫情最新消息今天
  • 菜鸟教程网站是怎么做的必应搜索引擎入口官网
  • 订阅号如何做微网站seo优化网站排名
  • 做企业网站前期需要准备什么资料怎么创建自己的网址
  • 郑州做网站报价站域名多少钱成都谷歌seo
  • 杭州咨询网站公司网页百度
  • 如何制作自己的网站图?千万别手贱在百度上搜这些词
  • 用媒体做响应式网站可以吗宁波seo网页怎么优化
  • php搭建网站软件英文外链seo兼职在哪里找
  • 水磨沟区做网站小红书推广渠道
  • 深圳建设局网站seo自学网app
  • 自己能网站建设数字营销工具
  • 建立网站后怎样收费百度seo营销推广多少钱
  • 网页制作视频教程下载上海优化网站公司哪家好