@@ -27,9 +27,14 @@ public MessageBufferU slice(int offset, int length) {
2727 return this ;
2828 else {
2929 checkArgument (offset + length <= size ());
30- reference .position (offset );
31- reference .limit (offset + length );
32- return new MessageBufferU (reference .slice ());
30+ try {
31+ reference .position (offset );
32+ reference .limit (offset + length );
33+ return new MessageBufferU (reference .slice ());
34+ }
35+ finally {
36+ resetBufferPosition ();
37+ }
3338 }
3439 }
3540
@@ -68,9 +73,9 @@ public double getDouble(int index) {
6873 }
6974 @ Override
7075 public void getBytes (int index , int len , ByteBuffer dst ) {
71- reference .position (index );
72- reference .limit (index +len );
7376 try {
77+ reference .position (index );
78+ reference .limit (index +len );
7479 dst .put (reference );
7580 }
7681 finally {
@@ -150,8 +155,8 @@ public void putByteBuffer(int index, ByteBuffer src, int len) {
150155
151156 @ Override
152157 public void putBytes (int index , byte [] src , int srcOffset , int length ) {
153- reference .position (index );
154158 try {
159+ reference .position (index );
155160 reference .put (src , srcOffset , length );
156161 }
157162 finally {
@@ -161,10 +166,12 @@ public void putBytes(int index, byte[] src, int srcOffset, int length) {
161166
162167 @ Override
163168 public void copyTo (int index , MessageBuffer dst , int offset , int length ) {
164- if (dst .hasArray ()) {
165- System .arraycopy (this .base , this .offset () + index , dst .getBase (), offset , length );
166- } else {
167- dst .putBytes (offset , this .getArray (), this .offset (), length );
169+ try {
170+ reference .position (index );
171+ dst .putByteBuffer (offset , reference , length );
172+ }
173+ finally {
174+ resetBufferPosition ();
168175 }
169176 }
170177 @ Override
0 commit comments