При преобразовании байта [] в строку, вы должны использовать это,
new String(b, "UTF-8");
вместо
b.toString();
Когда вы конвертируете байтовый массив в строку, вы всегда должны указывать кодировку символов и использовать ту же кодировку при конвертации обратно в байтовый массив из строки. Лучше всего использовать кодировку UTF-8, поскольку это достаточно мощная и компактная кодировка, которая может представлять более миллиона символов. Если вы не укажете кодировку символов, то может использоваться кодировка платформы по умолчанию, которая может не в состоянии правильно представить все символы при преобразовании из байтового массива в строку.
Ваш метод при правильном обращении должен быть написан примерно так:
public static void main(String args[]) throws Exception {
byte[] b = myFunction();
// String bstring = b.toString(); // don't do this
String bstring = new String(b, "UTF-8");
byte[] ser = bstring.getBytes("UTF-8");
/* Here the methode to convert the bstring to byte[], and call it ser */
String deser = new String(ser, "UTF-8");
}