Browse Source

Fixed concurrency problem in HexDump


git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353179 13f79535-47bb-0310-9956-ffa450edef68
tags/PERF_BEFORE_MERGE
Glen Stampoultzis 21 years ago
parent
commit
8d0a7d44ae
1 changed files with 60 additions and 21 deletions
  1. 60
    21
      src/java/org/apache/poi/util/HexDump.java

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

Loading…
Cancel
Save