netty 网络字节序

阅读数:165 评论数:0

跳转到新版页面

分类

python/Java

正文

一、概述

在计算机中,我们以字节为单位,一个字节为8bit。

而数据存储中的字节顺序多取决于硬件设计,即所谓的大端存储和小端存储。Intel处理器使用小端存储,PowerPc的处理器采用大端存储。

当使用互联网通信时,双方必须为字节数据的顺序达成一致的协议,才能正常解析,这就引出了计算机网络中的大小端。

1、字节的高低

比如 11001100 11110000,从数学上来讲,左边的11001100是高位字节,右边的11110000是低位字节。

2、地址的高低

地址排列始终是从左往右的,就跟数组一样,[byte0,byte1,…],索引小的就是低地址,索引大的就是高地址

二、大小端

1、大端

高字节数据存在低地址中,低字节数据存在高地址中。

通俗的讲,先得到或处理的字节是高位字节。很类似人类的从左到右读数字,“万千百十个”

从存储的角度看,即地址小的位置放高位字节,因为我们一般从低地址开始处理。从网络传输角度看,即先传输的是高字节。

2、小端

高字节数据存在高地址中,低字节数据存在低地址中

通俗的讲,先得到或处理的字节是低位字节

三、Netty的大小端

Netty中默认的字节序是大端,即收发的第一个字节都是高字节。

在Netty中可以设置字节顺序:ByteOrder.BIG_ENDIAN,ByteOrder.LITTLE_ENDIAN。

一般来说,除了编码器配置参数外,最多影响的就是ByteBuf。

1、声明ByteBuf的大小端类型(默认是大端)

ByteBuf byteBuf= Unpooled.buffer(12).order(ByteOrder.LITTLE_ENDIAN);

2、如果不修改ByteBuf大小端,但对方使用的是小端序时

(1)读取

//byte不需要转换,因为就一个字节不分大小端
byteBuf111.readShortLE();
byteBuf111.readIntLE();

(2)写入

		byteBuf111.writeIntLE(8);
		byteBuf111.writeShortLE(8);



相关推荐

Java NIO根据操作系统不同,比如macosx是KQueueSelectorProvider、windows有WindowsSelectorProvider、Linux有EPollSelec

Netty提供了丰富的解码器抽象基类:主要分为两类: (1)解码字节到消息(ByteToMessageDecoder和ReplayingDecoder) (2)解码消

一、概述 Netty的强大的地方,是他能方便的实现自定义协议的网络传输。Netty基于Reactor模式:http://1024s.top/mbstudy/mbBlog/blogDetail?blog

netty提供了6种不同的websocket类型: (1)BinaryWebsocketFrame,二进制数据类型 (2)TextWebSocketFrame,文本数

一、Channel的四大类型 1、FileChannel FileChannel是操作文件的Channel,可以通过FileChannel从一个文件中读取数据,也

ByteBuf是对字节的封装,有基于堆内存和直接内存。若是堆内存,应用程序无需考虑什么时候释放,因为GC是帮助做,如果是直接内存,那么需要主动释放。 每个ByteBuf对象都有一个引用计数,当这个数值

Netty中的HashedWheelTimer可以用于提交延迟任务,Java里的Time组件也具备相同的功能,不过Time是基于执行是基于优先队列实现的,相当于需要对所有的任务基于执行的时间排个

一、netty客户端流控 1、这几种情况下,如果客户端没有流控保护,很容易发生内存泄露。 (1)网络瓶颈,当客户端发送速度超过网络链路处理能力,会导致客户端发送队列积压。 (2)当对端读取速度小于已方

LineBasedFrameDecoder以换行符\n或\r\n作为依据,遇到\r\n都认为是一条完整的消息。 而DelimiterBasedFrameDecoder允许我们指定任

HttpServerCodec HtttpServerCodec只能处理像http get的请求,也就是数据带在url问号后面的http请求。 GET请求包括两部