FileDocCategorySizeDatePackage
HexDump.javaAPI DocAndroid 1.5 API5190Wed May 06 22:42:46 BST 2009org.apache.commons.io

HexDump

public class HexDump extends Object
Dumps data in hexadecimal format.

Provides a single function to take an array of bytes and display it in hexadecimal form.

Origin of code: POI.

author
Scott Sanders
author
Marc Johnson
version
$Id: HexDump.java 596667 2007-11-20 13:50:14Z niallp $

Fields Summary
public static final String
EOL
The line-separator (initializes to "line.separator" system property.
private static final char[]
_hexcodes
private static final int[]
_shifts
Constructors Summary
public HexDump()
Instances should NOT be constructed in standard programming.

        super();
    
Methods Summary
public static voiddump(byte[] data, long offset, java.io.OutputStream stream, int index)
Dump an array of bytes to an OutputStream.

param
data the byte array to be dumped
param
offset its offset, whatever that might mean
param
stream the OutputStream to which the data is to be written
param
index initial index into the byte array
throws
IOException is thrown if anything goes wrong writing the data to stream
throws
ArrayIndexOutOfBoundsException if the index is outside the data array's bounds
throws
IllegalArgumentException if the output stream is null

        
        if ((index < 0) || (index >= data.length)) {
            throw new ArrayIndexOutOfBoundsException(
                    "illegal index: " + index + " into array of length "
                    + data.length);
        }
        if (stream == null) {
            throw new IllegalArgumentException("cannot write to nullstream");
        }
        long display_offset = offset + index;
        StringBuffer buffer = new StringBuffer(74);

        for (int j = index; j < data.length; j += 16) {
            int chars_read = data.length - j;

            if (chars_read > 16) {
                chars_read = 16;
            }
            dump(buffer, display_offset).append(' ");
            for (int k = 0; k < 16; k++) {
                if (k < chars_read) {
                    dump(buffer, data[k + j]);
                } else {
                    buffer.append("  ");
                }
                buffer.append(' ");
            }
            for (int k = 0; k < chars_read; k++) {
                if ((data[k + j] >= ' ") && (data[k + j] < 127)) {
                    buffer.append((char) data[k + j]);
                } else {
                    buffer.append('.");
                }
            }
            buffer.append(EOL);
            stream.write(buffer.toString().getBytes());
            stream.flush();
            buffer.setLength(0);
            display_offset += chars_read;
        }
    
private static java.lang.StringBufferdump(java.lang.StringBuffer _lbuffer, long value)
Dump a long value into a StringBuffer.

param
_lbuffer the StringBuffer to dump the value in
param
value the long value to be dumped
return
StringBuffer containing the dumped value.


                                        
           
        for (int j = 0; j < 8; j++) {
            _lbuffer
                    .append(_hexcodes[((int) (value >> _shifts[j])) & 15]);
        }
        return _lbuffer;
    
private static java.lang.StringBufferdump(java.lang.StringBuffer _cbuffer, byte value)
Dump a byte value into a StringBuffer.

param
_cbuffer the StringBuffer to dump the value in
param
value the byte value to be dumped
return
StringBuffer containing the dumped value.

        for (int j = 0; j < 2; j++) {
            _cbuffer.append(_hexcodes[(value >> _shifts[j + 6]) & 15]);
        }
        return _cbuffer;