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

src/java/org/apache/poi/util/HexDump.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);
+    }
 }