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
1 changed files with 60 additions and 21 deletions

View 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);
}
}