]> source.dussan.org Git - poi.git/commitdiff
Fixed concurrency problem in HexDump
authorGlen Stampoultzis <glens@apache.org>
Mon, 30 Jun 2003 12:21:50 +0000 (12:21 +0000)
committerGlen Stampoultzis <glens@apache.org>
Mon, 30 Jun 2003 12:21:50 +0000 (12:21 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/branches/REL_2_BRANCH@353180 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/util/HexDump.java
src/java/org/apache/poi/util/HexRead.java

index bc846459d134ed91a04a07c87bb09a44c4dff055..d45b239bf765f7c2d06011174161be28ac33d7f5 100644 (file)
@@ -67,6 +67,20 @@ import java.io.*;
 
 public class HexDump
 {
+    public static final String        EOL         =
+        System.getProperty("line.separator");
+//    private static final StringBuffer _lbuffer    = new StringBuffer(8);
+//    private static final StringBuffer _cbuffer    = new StringBuffer(2);
+    private static final char         _hexcodes[] =
+    {
+        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
+        'E', 'F'
+    };
+    private static final int          _shifts[]   =
+    {
+        28, 24, 20, 16, 12, 8, 4, 0
+    };
+
 
     // all static methods, so no need for a public constructor
     private HexDump()
@@ -241,39 +255,26 @@ public class HexDump
     }
     
 
-    public static final String        EOL         =
-        System.getProperty("line.separator");
-    private static final StringBuffer _lbuffer    = new StringBuffer(8);
-    private static final StringBuffer _cbuffer    = new StringBuffer(2);
-    private static final char         _hexcodes[] =
-    {
-        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
-        'E', 'F'
-    };
-    private static final int          _shifts[]   =
-    {
-        28, 24, 20, 16, 12, 8, 4, 0
-    };
-
     private static String dump(final long value)
     {
-        _lbuffer.setLength(0);
+        StringBuffer buf = new StringBuffer();
+        buf.setLength(0);
         for (int j = 0; j < 8; j++)
         {
-            _lbuffer
-                .append(_hexcodes[ (( int ) (value >> _shifts[ j ])) & 15 ]);
+            buf.append( _hexcodes[ (( int ) (value >> _shifts[ j ])) & 15 ]);
         }
-        return _lbuffer.toString();
+        return buf.toString();
     }
 
     private static String dump(final byte value)
     {
-        _cbuffer.setLength(0);
+        StringBuffer buf = new StringBuffer();
+        buf.setLength(0);
         for (int j = 0; j < 2; j++)
         {
-            _cbuffer.append(_hexcodes[ (value >> _shifts[ j + 6 ]) & 15 ]);
+            buf.append(_hexcodes[ (value >> _shifts[ j + 6 ]) & 15 ]);
         }
-        return _cbuffer.toString();
+        return buf.toString();
     }
 
     /**
@@ -294,6 +295,7 @@ public class HexDump
         retVal.append(']');
         return retVal.toString();
     }
+
     /**
      * Converts the parameter to a hex value.
      *
@@ -337,4 +339,41 @@ public class HexDump
         }
         return result.toString();
     }
+
+    /**
+     * Dumps <code>bytesToDump</code> bytes to an output stream.
+     *
+     * @param in          The stream to read from
+     * @param out         The output stream
+     * @param start       The index to use as the starting position for the left hand side label
+     * @param bytesToDump The number of bytes to output.  Use -1 to read until the end of file.
+     */
+    public static void dump( InputStream in, PrintStream out, int start, int bytesToDump ) throws IOException
+    {
+        ByteArrayOutputStream buf = new ByteArrayOutputStream();
+        if (bytesToDump == -1)
+        {
+            int c = in.read();
+            while (c != -1)
+            {
+                buf.write(c);
+                c = in.read();
+            }
+        }
+        else
+        {
+            int bytesRemaining = bytesToDump;
+            while (bytesRemaining-- > 0)
+            {
+                int c = in.read();
+                if (c == -1)
+                    break;
+                else
+                    buf.write(c);
+            }
+        }
+
+        byte[] data = buf.toByteArray();
+        dump(data, 0, out, start, data.length);
+    }
 }
index 3e0485c5aacb368d754215032ab0c97cbe322970..6c5eceb125d06b000518c5b306dd07554ee5d7ac 100644 (file)
 
 package org.apache.poi.util;
 
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
+import java.io.*;
 import java.util.List;
 import java.util.ArrayList;
 
@@ -212,6 +209,11 @@ public class HexRead
         return rval;
     }
 
+    static public byte[] readFromString(String data) throws IOException
+    {
+        return readData(new ByteArrayInputStream( data.getBytes() ), -1);
+    }
+
     static private void readToEOL( InputStream stream ) throws IOException
     {
         int c = stream.read();