Convertir jbyteArray en una matriz de caracteres y luego imprimir en la consola

Estoy escribiendo un programa JNI donde mi archivo .cpp obtiene un jbyteArray y quiero poder imprimir el jbyteArray con printf. Para que eso suceda, creo que tengo que convertir el jbyteArray a una matriz de caracteres.

Para conocer los antecedentes, el lado java de mi JNI convierte un String en un byteArray, y luego ese byteArray se pasa como un argumento a mi función JNI.

Lo que he hecho hasta ahora imprime el String correctamente, pero va seguido de caracteres no deseados, y no sé cómo deshacerme de estos / si estoy haciendo algo mal.

Esto es lo que la cadena es:

dsa

y lo que imprime a consola:

dsa,�

Los caracteres no deseados cambian dependiendo de lo que es la cadena. Aquí está la parte del código que es relevante:

archivo .java:

public class tcr extends javax.swing.JFrame{

static{
    System.loadLibrary("tcr");
}

public native int print(byte file1[]);

    .....

    String filex1 = data1TextField.getText();//gets a filepath in the form of a String from a GUI jtextfield.
    byte file1[]= filex1.getBytes();//convert file path from string to byte array

        tcr t = new tcr();
        t.print(file1);
}

código .cpp:

JNIEXPORT jint JNICALL Java_tcr_print(JNIIEnv *env, jobject thisobj, jbyteArray file1){

    jboolean isCopy;
    jbyte* a = env->GetByteArrayElements(file1,&isCopy);
    char* b;
    b = (char*)a;
    printf("%s\n",b);
}

Cualquier ayuda sería apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta