Я пытаюсь получить строку с устройства, используя этот код:
byte[] buf = new byte[4];
int read = inFromDevice.read(buf);
Logger.getLogger(Utill.class.getName() + " DEBUG_ERR01").log(Level.INFO, "Bytes read: {0}", read);
int msgLength = ByteBuffer.wrap(buf).getInt();
Logger.getLogger(Utill.class.getName() + " DEBUG_ERR01").log(Level.INFO, "Message length: {0}", msgLength);
Reader r = new InputStreamReader(inFromDevice);
char[] cb = new char[msgLength];
int actualCharsRead = r.read(cb);
Logger.getLogger(Utill.class.getName() + " DEBUG_ERR01").log(Level.INFO, "Actual chars read: {0} char array length: {1}", new Object[]{actualCharsRead, cb.length});
String msgText = String.valueOf(cb, 0, cb.length);
Logger.getLogger(Utill.class.getName() + "Messages Loggining recieve: ").log(Level.INFO, msgText);
return msgText;
inFromDevice и InputStream получены из принятого ServerSocket.
Код работает и возвращает сообщения большую часть времени, но иногда я получаю сообщения меньше, чем msgLength (что неверно согласно протоколу)
Пример из журнала: Actual chars read: 1020 char array length: 1391
Я думаю, что проблема внешняя из-за проблемы с сетью или проблемы с устройством, но мне нужно некоторое экспертное понимание этого. Есть ли в Java известные проблемы, которые могут вызвать это?