From 4680cd0bb3e0bd1029e2c3d434bdd651dd9ed9ce Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Mon, 16 Aug 2010 05:57:34 +0000 Subject: [PATCH] Improved performance of ProtobufDecoder using array directly when possible (Thanks Ian - iswett@yahoo.com) --- .../codec/protobuf/ProtobufDecoder.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java b/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java index 37ea9ba30b..5aca2d4e86 100644 --- a/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java +++ b/src/main/java/org/jboss/netty/handler/codec/protobuf/ProtobufDecoder.java @@ -97,13 +97,23 @@ public class ProtobufDecoder extends OneToOneDecoder { return msg; } - if (extensionRegistry == null) { - return prototype.newBuilderForType().mergeFrom( - new ChannelBufferInputStream((ChannelBuffer) msg)).build(); + ChannelBuffer buf = (ChannelBuffer) msg; + if (buf.hasArray()) { + if(extensionRegistry == null) { + return prototype.newBuilderForType().mergeFrom( + buf.array(),buf.arrayOffset(), buf.readableBytes()).build(); + } else { + return prototype.newBuilderForType().mergeFrom( + buf.array(), buf.arrayOffset(), buf.readableBytes(), extensionRegistry).build(); + } } else { - return prototype.newBuilderForType().mergeFrom( - new ChannelBufferInputStream((ChannelBuffer) msg), - extensionRegistry).build(); + if (extensionRegistry == null) { + return prototype.newBuilderForType().mergeFrom( + new ChannelBufferInputStream((ChannelBuffer) msg)).build(); + } else { + return prototype.newBuilderForType().mergeFrom( + new ChannelBufferInputStream((ChannelBuffer) msg), extensionRegistry).build(); + } } } }