From 15943a2e55408907099a7d077076c33d21a7029b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E5=99=A8=E8=BF=91?= Date: Fri, 23 Jul 2021 09:26:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8writerIndex=E6=A0=87=E8=AE=B0=E4=BB=A3?= =?UTF-8?q?=E6=9B=BFSlice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yezhihao/protostar/schema/CollectionSchema.java | 6 +++++- .../github/yezhihao/protostar/schema/ConvertSchema.java | 9 +++++++-- .../github/yezhihao/protostar/schema/ObjectSchema.java | 9 +++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/github/yezhihao/protostar/schema/CollectionSchema.java b/src/main/java/io/github/yezhihao/protostar/schema/CollectionSchema.java index c99b57b..8bc54ae 100644 --- a/src/main/java/io/github/yezhihao/protostar/schema/CollectionSchema.java +++ b/src/main/java/io/github/yezhihao/protostar/schema/CollectionSchema.java @@ -37,7 +37,11 @@ public class CollectionSchema implements Schema> { @Override public List readFrom(ByteBuf input, int length) { - return this.readFrom(input.readSlice(length)); + int writerIndex = input.writerIndex(); + input.writerIndex(input.readerIndex() + length); + List result = this.readFrom(input); + input.writerIndex(writerIndex); + return result; } @Override diff --git a/src/main/java/io/github/yezhihao/protostar/schema/ConvertSchema.java b/src/main/java/io/github/yezhihao/protostar/schema/ConvertSchema.java index 9ae56c1..051c079 100644 --- a/src/main/java/io/github/yezhihao/protostar/schema/ConvertSchema.java +++ b/src/main/java/io/github/yezhihao/protostar/schema/ConvertSchema.java @@ -35,8 +35,13 @@ public class ConvertSchema implements Schema { @Override public T readFrom(ByteBuf input, int length) { - if (length > 0) - input = input.readSlice(length); + if (length > 0) { + int writerIndex = input.writerIndex(); + input.writerIndex(input.readerIndex() + length); + T result = converter.convert(input); + input.writerIndex(writerIndex); + return result; + } return converter.convert(input); } diff --git a/src/main/java/io/github/yezhihao/protostar/schema/ObjectSchema.java b/src/main/java/io/github/yezhihao/protostar/schema/ObjectSchema.java index d29e820..9b6c6fb 100644 --- a/src/main/java/io/github/yezhihao/protostar/schema/ObjectSchema.java +++ b/src/main/java/io/github/yezhihao/protostar/schema/ObjectSchema.java @@ -25,8 +25,13 @@ public class ObjectSchema implements Schema { @Override public T readFrom(ByteBuf input, int length) { - if (length > 0) - input = input.readSlice(length); + if (length > 0) { + int writerIndex = input.writerIndex(); + input.writerIndex(input.readerIndex() + length); + T result = schema.readFrom(input); + input.writerIndex(writerIndex); + return result; + } return schema.readFrom(input); }