本章内容其实没有多大难度,主要考察大家的细心程度.计算数据长度然后截取相应字节数组并按照协议进行解码,编码则反之。
1.基础消息的编解码
@Override
public BasicMessage decode(byte[] bytes) {
int dataLength = ByteUtil.bytesToInt(ByteUtil.extract(bytes, 2, 4));
if (dataLength != bytes.length) {
throw new IllegalArgumentException("The data length is incorrect.");
}
return new BasicMessage()
.setRequest(RequestType.valueOfId(ByteUtil.extract(bytes, 0, 1)[0]))
.setResponse(ResponseType.valueOfId(ByteUtil.extract(bytes, 1, 1)[0]))
.setDataLength(dataLength)
.setPayload(ByteUtil.extract(bytes, 6, dataLength - 1 - 1 - 4 - 8))
.setTimestamp(ByteUtil.bytesToLong(ByteUtil.extract(bytes, dataLength - 8, 8)));
}
@Override
public byte[] encode() {
byte[] request = new byte[]{this.getRequest().getId()};
byte[] response = new byte[]{this.getResponse().getId()};
byte[] payload = (n