code: public static String print_bytes( byte[] data, int offset, int length ) {
          int size = 2 * length;
          size += ((size / 8) + (size / 64));
  
          char[] buf = new char[size];
          int low_mask = 0x0f;
          int high_mask = 0xf0;
          int buf_pos = 0;
          byte b;
  
          int j = 0;
  
          for( int i = offset; i < (offset + length); ++i ) {
              b = data[i];
              buf[buf_pos++] = digits[(high_mask & b) >> 4];
              buf[buf_pos++] = digits[(low_mask & b)];
  
              if ((j % 4) == 3) {
                  buf[buf_pos++] = ' ';
              }
  
              if ((j % 32) == 31) {
                  buf[buf_pos++] = '\n';
              }
  
              ++j;
          }
  
          return new String(buf);
      }
docs: Produce a <code>String</code> representation for the specified array of
  <code>byte</code>s.  Print each <code>byte</code> as two hexadecimal
  digits.
  
  @param data The array to print
  @param offset the start offset in <code>data</code>
  @param length the number of <code>byte</code>s to print
  
  @return DOCUMENT ME!