netty可以传输报文,为了解决数据粘连,自己费力气写了缓存
private void addCmd(byte[] bytes, byte len1, byte len2, List list) {
log.debug("Jc5000Service Jc5000Decoder decode jcBuffer.limit memory ={}",jcBuffer.limit());
Jc5000Response jc5000Response = new Jc5000Response();
byte cmdCode = (byte) (bytes[CMD_POS] & 0xff);
if (log.isDebugEnabled()) {
log.debug("Jc5000Service Jc5000Decoder decode command is cmdCode=" + cmdCode + "," + Jc5000CommandEnum.getJc5000CommandEnumKeyByCode(cmdCode));
}
jc5000Response.setCmdCode(cmdCode);
jc5000Response.setCommand(Jc5000CommandEnum.getJc5000CommandEnumByCode(cmdCode));
jc5000Response.setLEN(new byte[]{len1, len2});
jc5000Response.setBCC(bytes[bytes.length - 2]);
if (log.isDebugEnabled()) {
log.debug("Jc5000Service Jc5000Decoder success parse addcmd {}", bytes2HexString(bytes));
}
jc5000Response.setDATA(bytes);
byte reponseFlag = bytes[SUCCESS_POS];
jc5000Response.setReponseFlag(reponseFlag);
if (reponseFlag == Constants.SUCCESS) {
jc5000Response.setIS_SUCCEEDED(true);
log.info("Jc5000Service Jc5000Decoder cmd execute success");
TvmRuntimeCoreDeviceStatusManager.getInstance().setJc5000ReaderStatus(DeviceStatusEnum.NORMAL.getCode());
TvmRuntimeCoreDeviceStatusManager.getInstance().setJc5000ReaderrCode(StringUtils.EMPTY);
} else if (reponseFlag == Constants.FAIL) {
byte[] errorCode = Arrays.copyOfRange(bytes, 5, bytes.length);
jc5000Response.setErrorcode(errorCode);
if (errorCode != null && errorCode.length >= 2) {
jc5000Response.setErrCode(String.format("%02dH", Integer.valueOf(errorCode[1])));
jc5000Response.setErrUniqueCode(bytes2HexString(new byte[]{errorCode[0],errorCode[1]}));
}
log.error("Jc5000Service Jc5000Decoder execute failure , {}",bytes2HexString(bytes));
}else{
log.error("Jc5000Service Jc5000Decoder execute ,other failure, result={}", reponseFlag);
}
list.add(jc5000Response);
}
/**
* 读取到缓存里所有数据
*/
public byte[] conver(ByteBuffer byteBuffer) {
byteBuffer.flip();
byteBuffer.rewind();
int len = byteBuffer.limit() - byteBuffer.position();
byte[] bytes = new byte[l

本文介绍使用Netty进行数据传输时如何解决数据粘连问题,并通过自定义缓存和解析逻辑实现可靠的消息解码。同时探讨了利用Netty插件LengthFieldBasedFrameDecoder简化代码的方法。
最低0.47元/天 解锁文章
3367

被折叠的 条评论
为什么被折叠?



