perf[bytebuf]: adjust Padding

This commit is contained in:
sun committed 2023-09-26 15:57:46 +08:00
1 parent 61038e1a67
commit aadc4d829e
1 file changed
+19 -3
@@ -371,9 +371,25 @@ public abstract class ByteBufUtils {
// 预估需要写入的字节数,并预留位置
var beforeWriteIndex = byteBuf.writerIndex();
var maxLength = ByteBufUtil.utf8MaxBytes(value);
writeInt(byteBuf, maxLength);
byteBuf.writeCharSequence(value, StringUtils.DEFAULT_CHARSET);
adjustPadding(byteBuf, maxLength, beforeWriteIndex);
var writeIntCountByte = writeInt(byteBuf, maxLength);
var length = byteBuf.writeCharSequence(value, StringUtils.DEFAULT_CHARSET);
var currentWriteIndex = byteBuf.writerIndex();
// 因为写入的是可变长的int,如果预留的位置过多,则清除多余的位置
var padding = writeIntCountByte - writeIntCount(length);
if (padding == 0) {
byteBuf.writerIndex(beforeWriteIndex);
writeInt(byteBuf, length);
byteBuf.writerIndex(currentWriteIndex);
} else {
var retainedByteBuf = byteBuf.retainedSlice(currentWriteIndex - length, length);
byteBuf.writerIndex(beforeWriteIndex);
writeInt(byteBuf, length);
byteBuf.writeBytes(retainedByteBuf);
ReferenceCountUtil.release(retainedByteBuf);
}
}
public static String readString(ByteBuf byteBuf) {