From: Glen Stampoultzis Date: Mon, 30 Jun 2003 12:20:55 +0000 (+0000) Subject: Fixed concurrency problem in HexDump X-Git-Tag: PERF_BEFORE_MERGE~287 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8d0a7d44ae244a27849e99c686fdf3c692ff5fa1;p=poi.git Fixed concurrency problem in HexDump git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353179 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/util/HexDump.java b/src/java/org/apache/poi/util/HexDump.java index bc846459d1..d45b239bf7 100644 --- a/src/java/org/apache/poi/util/HexDump.java +++ b/src/java/org/apache/poi/util/HexDump.java @@ -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 bytesToDump 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); + } }