为什么只存 packetLength 的低5位到body中?
来源:9-11 消息分片传输设计与实现-3
磊磊要酷酷滴
2019-05-02
- 这里为什么只存
packetLength
的低 5 位到body
中?
public SendHeaderFrame(short identifier, SendPacket packet) {
super(PACKET_HEADER_FRAME_MIN_LENGTH,
Frame.TYPE_PACKET_HEADER,
Frame.FLAG_NONE,
identifier,
packet);
final long packetLength = packet.length();
final byte packetType = packet.type();
final byte[] packetHeaderInfo = packet.headerInfo();
// 头部对应的数据信息长度
body = new byte[bodyRemaining];
// 头5字节存储长度信息低5字节(40位)数据
// 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
body[0] = (byte) (packetLength >> 32);
body[1] = (byte) (packetLength >> 24);
body[2] = (byte) (packetLength >> 16);
body[3] = (byte) (packetLength >> 8);
body[4] = (byte) (packetLength);
body[5] = packetType;
if (packetHeaderInfo != null) {
System.arraycopy(packetHeaderInfo, 0,
body, PACKET_HEADER_FRAME_MIN_LENGTH, packetHeaderInfo.length);
}
}
写回答
1回答
-
不是5位吧??是40位。5字节。
这是因为:我的数值本身都是正数,所以我们不必耗费字节来存储符号位;所以我们可以直接来看:
2的40次方:1099511627776字节
1099511627776/1024/1024/1024 = 1024GB
试问,就算是极限情况下会一次性传递1024GB的数据么?不会吧。所以就已经足够了。
10
相似问题