Fixed concurrency problem in HexDump

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353179 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Glen Stampoultzis 2003-06-30 12:20:55 +00:00
parent 4e2ea4d4c4
commit 0e07f23fb3

View File

@ -67,6 +67,20 @@ import java.io.*;
public class HexDump 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 // all static methods, so no need for a public constructor
private HexDump() 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) private static String dump(final long value)
{ {
_lbuffer.setLength(0); StringBuffer buf = new StringBuffer();
buf.setLength(0);
for (int j = 0; j < 8; j++) for (int j = 0; j < 8; j++)
{ {
_lbuffer buf.append( _hexcodes[ (( int ) (value >> _shifts[ j ])) & 15 ]);
.append(_hexcodes[ (( int ) (value >> _shifts[ j ])) & 15 ]);
} }
return _lbuffer.toString(); return buf.toString();
} }
private static String dump(final byte value) private static String dump(final byte value)
{ {
_cbuffer.setLength(0); StringBuffer buf = new StringBuffer();
buf.setLength(0);
for (int j = 0; j < 2; j++) 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(']'); retVal.append(']');
return retVal.toString(); return retVal.toString();
} }
/** /**
* Converts the parameter to a hex value. * Converts the parameter to a hex value.
* *
@ -337,4 +339,41 @@ public class HexDump
} }
return result.toString(); 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);
}
} }