Browse Source

减少两处bytebuf的复制操作

xiuwei 3 years ago
parent
commit
b03f3064ca

+ 7 - 6
protocol-core/src/main/java/wei/yigulu/netty/AbstractDelimiterHandler.java

@@ -5,6 +5,7 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.util.ReferenceCountUtil;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
@@ -13,6 +14,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import wei.yigulu.utils.DataConvertor;
 
+import java.awt.image.DataBuffer;
+
 /**
  * 未继承netty的数据帧处理拆包类
  *
@@ -64,13 +67,9 @@ public abstract class AbstractDelimiterHandler extends ChannelInboundHandlerAdap
 	 * @return {@link ByteBuf}
 	 */
 	protected static ByteBuf expandCumulation(ByteBuf byteBuf1, ByteBuf byteBuf2) {
-		ByteBuf oldCumulation = byteBuf1;
-		byteBuf1 = byteBuf1.alloc().buffer(oldCumulation.readableBytes() + byteBuf2.readableBytes());
-		byteBuf1.writeBytes(oldCumulation);
+		byteBuf1.discardReadBytes();
+		byteBuf1.ensureWritable(byteBuf2.readableBytes());
 		byteBuf1.writeBytes(byteBuf2);
-		byteBuf1.readerIndex(0);
-		while (!oldCumulation.release()) {
-		}
 		while (!byteBuf2.release()) {
 		}
 		return byteBuf1;
@@ -151,6 +150,8 @@ public abstract class AbstractDelimiterHandler extends ChannelInboundHandlerAdap
 			while (!cumulation.release()) {
 			}
 			cumulation = null;
+			while (!byteBuf.release()) {
+			}
 			log.warn("报文超长舍弃");
 			return true;
 		} else {

+ 2 - 4
protocol-core/src/main/java/wei/yigulu/utils/DataConvertor.java

@@ -1,6 +1,7 @@
 package wei.yigulu.utils;
 
 import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
 import io.netty.util.ReferenceCountUtil;
 
 import java.util.Formatter;
@@ -55,10 +56,7 @@ public class DataConvertor {
 		if (!buf.isReadable()) {
 			return null;
 		}
-		ByteBuf b1 = buf.copy();
-		byte[] bs = new byte[b1.readableBytes()];
-		b1.readBytes(bs);
-		ReferenceCountUtil.release(b1);
+		byte[] bs=ByteBufUtil.getBytes(buf);
 		return Byte2String(bs);
 	}
 

+ 1 - 1
protocol-iec104/src/test/java/ClientTest.java

@@ -13,7 +13,7 @@ import wei.yigulu.iec104.util.SendDataFrameHelper;
 public class ClientTest {
 
 	public static void main(String[] args) throws Exception {
-		Iec104HSMasterBuilder iec104HSMasterBuilder = new Iec104HSMasterBuilder("192.168.1.161", 2434);
+		Iec104HSMasterBuilder iec104HSMasterBuilder = new Iec104HSMasterBuilder("192.168.1.206", 2405);
 				iec104HSMasterBuilder.createByUnBlock();
 		/*Apdu apdu=new Apdu();
 		iec104HSMasterBuilder.sendFrameToOpposite(apdu.encode());