Cache pattern splitters 04/20204/2
authorRobert Varga <rovarga@cisco.com>
Wed, 13 May 2015 01:08:56 +0000 (03:08 +0200)
committerRobert Varga <rovarga@cisco.com>
Wed, 13 May 2015 01:12:08 +0000 (03:12 +0200)
Splitters are reusable, so make sure we cache them in a constant and
reuse as needed.

Change-Id: I87b50b790b758ad275e6095c1e820385c535968d
Signed-off-by: Robert Varga <rovarga@cisco.com>
util/src/main/java/org/opendaylight/openflowjava/util/ByteBufUtils.java

index 613442917afddcd0ebb9f1e34269b1b84d148407..d68f6f9cd9c83e6811dd203848ff00f4a1eea372 100644 (file)
@@ -9,21 +9,18 @@
 
 package org.opendaylight.openflowjava.util;
 
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Lists;
+import com.google.common.primitives.UnsignedBytes;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.UnpooledByteBufAllocator;
-
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Lists;
-import com.google.common.primitives.UnsignedBytes;
-
 /** Class for common operations on ByteBuf
  * @author michal.polkorab
  * @author timotej.kubas
@@ -32,6 +29,8 @@ public abstract class ByteBufUtils {
     public static final Splitter DOT_SPLITTER = Splitter.on('.');
     public static final Splitter COLON_SPLITTER = Splitter.on(':');
     private static final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();
+    private static final Splitter HEXSTRING_SPLITTER =  Splitter.onPattern("\\s+").omitEmptyStrings();
+    private static final Splitter HEXSTRING_NOSPACE_SPLITTER = Splitter.onPattern("(?<=\\G.{2})").omitEmptyStrings();
 
     private ByteBufUtils() {
         //not called
@@ -65,14 +64,9 @@ public abstract class ByteBufUtils {
      * @param withSpaces if there are spaces in string
      * @return byte[] filled with input data
      */
-    public static byte[] hexStringToBytes(final String hexSrc, final boolean withSpaces ) {
-        String splitPattern = "\\s+";
-        if (!withSpaces) {
-            splitPattern = "(?<=\\G.{2})";
-        }
-        Iterable<String> tmp = Splitter.onPattern(splitPattern)
-                .omitEmptyStrings().split(hexSrc);
-        List<String> byteChips = Lists.newArrayList(tmp);
+    public static byte[] hexStringToBytes(final String hexSrc, final boolean withSpaces) {
+        final Splitter splitter = withSpaces ? HEXSTRING_SPLITTER : HEXSTRING_NOSPACE_SPLITTER;
+        List<String> byteChips = Lists.newArrayList(splitter.split(hexSrc));
         byte[] result = new byte[byteChips.size()];
         int i = 0;
         for (String chip : byteChips) {