Hola,
Al usar ...
System.out.print("\n"+datos);
... no se imprimen los caracteres UTF-8, sino la dirección de memoria donde está almacenado el array de bytes (o un hash que supuestamente es la dirección de memoria). Para imprimir cada uno de los bytes, tienes que recorrer el arreglo, uno a uno e imprimirlo en pantalla.
Código:
byte[] b = {0x13, 0x14, 0x15, 0x16};
for (int i = 0; i < b.length; i++) {
System.out.printf("%d\n", b[i]); // DECIMAL
System.out.printf("%h\n", b[i]); // HEXADECIMAL
System.out.println(Integer.toHexString(b[i]));
}
Saludos,