Проблема, с которой вы столкнетесь, заключается в том, что все, что вы можете написать UTF (), вы также можете сделать с помощью write () и наоборот. Это никоим образом не означает разницу, не делая предположений о типе данных, которые могут быть отправлены. Это может быть сделано для некоторых конкретных случаев, но не будет работать в общем случае.
Читатель не может точно определить длину записи (в байтах []). Возможно, вы обнаружите, что read () большую часть времени будет читать ту же самую длину по шлейфу, но не будет работать в реальной сети.
Таким образом, отправитель выполняет запись (byte []), за которой следует writeUTF (String). Нет способа узнать, как долго длилась первая запись, поэтому нет способа определить, когда начинается writeUTF (опять же, если вы не сделаете предположений относительно типа отправляемых данных)
Решением вашей проблемы является отправка длины фрагмента данных с последующим типом данных. например,
запись (байты) заменяется writeInt (bytes.length), запись ((байт) 1 / * байт * /), запись (байты)
writeUTF (байты) заменяется на byte [] bytes = text.getBytes ("UTF-8"); writeInt (bytes.length), write ((byte) 2 / * UTF * /), write (bytes)
Таким образом, получатель знает длину сообщения и его тип.