Author: sebb
Date: Sat Apr 24 17:54:50 2010
New Revision: 937661

URL: http://svn.apache.org/viewvc?rev=937661&view=rev
Log:
Add baToHexBytes method to avoid unnecessary conversion via string

Modified:
    jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
    jakarta/jmeter/trunk/test/src/org/apache/jorphan/util/TestJorphanUtils.java

Modified: 
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java?rev=937661&r1=937660&r2=937661&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java 
(original)
+++ jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java 
Sat Apr 24 17:54:50 2010
@@ -468,4 +468,26 @@ public final class JOrphanUtils {
         }
         return sb.toString();
     }
+
+    /**
+     * Convert binary byte array to hex string.
+     *
+     * @param ba input binary byte array
+     * @return hex representation of binary input
+     */
+    public static byte[] baToHexBytes(byte ba[]) {
+        byte[] hb = new byte[ba.length*2];
+        for (int i = 0; i < ba.length; i++) {
+            byte upper = (byte) ((ba[i] & 0xf0) >> 4);
+            byte lower = (byte) (ba[i] & 0x0f);
+            hb[2*i]=toHexChar(upper);
+            hb[2*i+1]=toHexChar(lower);
+        }
+        return hb;
+    }
+
+    private static byte toHexChar(byte in){
+        if (in < 10) return (byte) (in+'0');
+        return (byte) ((in-10)+'a');
+    }
 }

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?rev=937661&r1=937660&r2=937661&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
 Sat Apr 24 17:54:50 2010
@@ -1478,7 +1478,7 @@ public abstract class HTTPSamplerBase ex
         w.flush();
         if (asMD5 && md != null) {
             byte[] md5Result = md.digest();
-            w.write(JOrphanUtils.baToHexString(md5Result).getBytes());
+            w.write(JOrphanUtils.baToHexBytes(md5Result)); 
             sampleResult.setBytes(totalBytes);
         }
         w.close();

Modified: 
jakarta/jmeter/trunk/test/src/org/apache/jorphan/util/TestJorphanUtils.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/test/src/org/apache/jorphan/util/TestJorphanUtils.java?rev=937661&r1=937660&r2=937661&view=diff
==============================================================================
--- jakarta/jmeter/trunk/test/src/org/apache/jorphan/util/TestJorphanUtils.java 
(original)
+++ jakarta/jmeter/trunk/test/src/org/apache/jorphan/util/TestJorphanUtils.java 
Sat Apr 24 17:54:50 2010
@@ -22,6 +22,8 @@
      
 package org.apache.jorphan.util;
 
+import java.io.UnsupportedEncodingException;
+
 import junit.framework.TestCase;
 
 public class TestJorphanUtils extends TestCase {
@@ -301,4 +303,17 @@ public class TestJorphanUtils extends Te
         assertEquals("00",JOrphanUtils.baToHexString(new byte[]{0}));
         assertEquals("0f107f8081ff",JOrphanUtils.baToHexString(new 
byte[]{15,16,127,-128,-127,-1}));
     }
+
+    public void testbaToByte() throws Exception{
+        assertEqualsArray(new byte[]{},JOrphanUtils.baToHexBytes(new 
byte[]{}));
+        assertEqualsArray(new byte[]{'0','0'},JOrphanUtils.baToHexBytes(new 
byte[]{0}));
+        
assertEqualsArray("0f107f8081ff".getBytes("UTF-8"),JOrphanUtils.baToHexBytes(new
 byte[]{15,16,127,-128,-127,-1}));
+    }
+
+    private void assertEqualsArray(byte[] expected, byte[] actual){
+        assertEquals("arrays must be same length",expected.length, 
actual.length);
+        for(int i=0; i < expected.length; i++){
+            assertEquals("values must be the same for index: 
"+i,expected[i],actual[i]);
+        }
+    }
 }


Reply via email to