Похоже на UTF-16. Чтобы создать строку из этих байтов, используйте:
new String(byte[]{0x00, 0x21}, "UTF-16")
Это создает строку, содержащую восклицательный знак. Символ charAt (0).
EDIT
может быть не самый производительный подход, но он работает и для других кодировок ...
EDIT
ОК, возникло недоразумение, приведенный выше код был не решением, а примером того, как облегчить конструктору String создание строки из последовательности байтов в специальной кодировке. Как пример, это выглядело статично. Вот решение во время выполнения (зная, что особенно принятое решение подходит гораздо лучше - это просто более общее):
public char decodeUTF16(byte b1, byte b2) {
return decode(new byte[]{b1, b2}).charAt(0);
}
public String decodeUTF16(byte[] bytes) {
return decode(bytes, "UTF-16");
}
public String decode(byte[] bytes, String encoding) {
return new String(bytes, encoding);
}