Вы не знаете, сколько данных будет доступно при чтении.Например, если последний раз, когда сокет был записан, был, например, 16 КБ, вы можете прочитать меньше этого или больше этого.
Вы должны написать код, который предполагает, что вам не нужно знать.Это позволяет обрабатывать данные по мере их поступления независимо от длины.
Если вы ожидаете отправить блок данных фиксированной длины, сначала отправьте размер.
byte[] bytes = new byte[1024];
final DataInputStream in = new DataInputStream(s.getInputStream());
int length = in.readInt();
if (length > bytes.length) bytes = new byte[length];
in.readFully(bytes, 0, length); // read length bytes or throw an exception.