mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-13 02:14:52 +00:00
perf[bytebuf]: adjust Padding
This commit is contained in:
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) {
|
||||
|
||||
Reference in new issue
Block a user