public String toString() {
		StringBuilder result = new StringBuilder();
		StringBuilder ascii = new StringBuilder();

		if (offset >= 0)
			result.append(String.format("Location: %d-%d\n", offset, offset+bytes.length));
		else
			result.append(String.format("Length: %d\n", bytes.length));

		for (int i=0; i < bytes.length; i++) {
			result.append( (char)(HEX_CHARS[( bytes[i] & 0x00F0 ) >> 4]) );
			result.append( (char)(HEX_CHARS[( bytes[i] & 0x000F )]) );

			char charValue = (char)bytes[i];
			if (charValue >= 32 && charValue < 127)
				ascii.append( charValue );
			else
				ascii.append( "." );

			if ( i < bytes.length-1 ) {
				if ( i % 16 == 15 ) {
					result.append("   ").append(ascii);
					result.append("\n");
					ascii.setLength(0);
				} else if (i % 2 == 1) {
					result.append(" ");
				}
			}
		}
		result.append("\n");
		return result.toString();
	}