Хранение двоичных данных в строках - ИМХО плохая идея.Тем более, что используемый в String метод getBytes () возвращает байты в зависимости от кодировки системы по умолчанию (в большинстве случаев для Linux это не UTF-8), что может привести к неожиданным последовательностям байтов.Массивы байтов также могут быть определены следующим образом:
new byte{(byte) 0xA5, (byte) 0x00, (byte) 0x00 (byte) 0x00 (byte) 0x00 (byte) 0x30 (byte) 0x00 (byte) 0x00 (byte) 0x51 (byte) 0x10}
В качестве альтернативы вы можете использовать Общий кодек Apache Hex для преобразования шестнадцатеричных строк в байтовый массив.
Вторая ошибкаэто использование ObjectInputStream
и readObject()
для чтения восстановленных данных.Он предназначен для чтения данных сериализованного класса Java.Лучше используйте DataInputStream
и этот код:
byte msg [] = new byte[1024];
System.out.println("D6");
int bytesReturned = in.read(msg, 0, msg.length);
Обратите внимание, что результат может быть неполным, если данные не передаются как один блок.Если вы знаете точный размер сообщения, используйте взамен readFull (msg).