Вам не нужно беспокоиться о том, как данные разбиваются на пакеты.
Вы должны включить длину строки в свои сообщения, а затем на принимающей стороне вы сначала прочитаете длину. Так, например, для отправки вы бы сделали
byte[] arbytes = ar.getBytes(Charset.forName("UTF-8"));
output.writeInt(arbytes.length)
output.write(arbytes)
, а затем в вашем читателе вы делаете
byte[] arbytes = new byte[input.readInt()];
for(int i = 0; i < len; i++){
arbytes[i] = input.read();
}
//convert bytes back to string.
Вы не можете просто вызвать input.read (arbytes), потому что функция read не обязательно считывает всю длину массива. Вы можете сделать цикл, где вы читаете порцию за раз, но код для этого немного сложнее.
В любом случае, вы поняли идею.
Кроме того, если вы действительно хотите управлять тем, что входит в какие пакеты, вы можете использовать Datagram Sockets , но если вы это сделаете, то доставка пакета не гарантируется.