public static void printHexOn( PrintStream stream, ByteBuffer b )
	{
		final int		lim	= b.limit(); // len = b.limit() - off;
		final byte[]	txt	= new byte[ 74 ];
		int				i, j, k, n, m;

		for( i = 4; i < 56; i++ ) {
			txt[ i ] = (byte) 0x20;
        }
		txt[ 56 ] = (byte) 0x7C;
		
		stream.println();
		for( i = b.position(); i < lim; ) {
			j = 0;
			txt[ j++ ]	= hex[ (i >> 12) & 0xF ];
			txt[ j++ ]	= hex[ (i >> 8) & 0xF ];
			txt[ j++ ]	= hex[ (i >> 4) & 0xF ];
			txt[ j++ ]	= hex[ i & 0xF ];
			m = 57;
			for( k = 0; k < 16 && i < lim; k++, i++ ) {
				if( (k & 7) == 0 ) j += 2; else j++;
				n			= b.get();
				txt[ j++ ]	= hex[ (n >> 4) & 0xF ];
				txt[ j++ ]	= hex[ n & 0xF ];
				txt[ m++ ]	= (n > 0x1F) && (n < 0x7F) ? (byte) n : (byte) 0x2E;
			}
			txt[ m++ ] = (byte) 0x7C;
			while( j < 54 ) {
				txt[ j++ ] = (byte) 0x20;
			}
			while( m < 74 ) {
				txt[ m++ ] = (byte) 0x20;
			}
			stream.write( txt, 0, 74 );
			stream.println();
        }
		stream.println();
    }