THRIFT-2612 Java TCompactProtocol.readBinary zero copying
authorJens Geyer <jensg@apache.org>
Mon, 14 Jul 2014 20:39:46 +0000 (22:39 +0200)
committerJens Geyer <jensg@apache.org>
Mon, 14 Jul 2014 20:39:46 +0000 (22:39 +0200)
Client: Java
Patch: Jon Hoffman

lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java

index 75300b8..0a653a1 100644 (file)
@@ -698,6 +698,12 @@ public class TCompactProtocol extends TProtocol {
     checkStringReadLength(length);
     if (length == 0) return ByteBuffer.wrap(new byte[0]);
 
+    if (trans_.getBytesRemainingInBuffer() >= length) {
+      ByteBuffer bb = ByteBuffer.wrap(trans_.getBuffer(), trans_.getBufferPosition(), length);
+      trans_.consumeBuffer(length);
+      return bb;
+    }
+
     byte[] buf = new byte[length];
     trans_.readAll(buf, 0, length);
     return ByteBuffer.wrap(buf);