Fixed concurrency problem in HexDump

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/branches/REL_2_BRANCH@353180 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Glen Stampoultzis 2003-06-30 12:21:50 +00:00
parent 230c71eae7
commit ff5c232ffb
2 changed files with 66 additions and 25 deletions

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

View File

@ -54,10 +54,7 @@
package org.apache.poi.util; package org.apache.poi.util;
import java.io.IOException; import java.io.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
@ -212,6 +209,11 @@ public class HexRead
return rval; 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 static private void readToEOL( InputStream stream ) throws IOException
{ {
int c = stream.read(); int c = stream.read();