DataInputStream.read возвращает меньше len

Я использую DataInputStream для чтения некоторых байтов из сокета. У меня есть ожидаемое количество байтов для чтения из потока (после декодирования заголовка я знаю, сколько байтов находится в сообщении). Он работает 99% времени, но иногда у меня будет количество прочитанных байтов меньше len .

int numRead = dis.read(buffer, 0, len);

Из-за чего numRead может оказаться меньше len? Это не -1. Я ожидаю, что поведение чтения будет блокироваться до тех пор, пока поток не будет закрыт или EOF не будет достигнут, но если это сокет, лежащий в основе потоков, этого не должно происходить, если сокет не закрывается, правильно?

Есть ли способ чтения байтов из сокета, который всегда гарантирует, что вы прочитаете len байтов?

Спасибо

5
задан barab157 12 January 2011 в 20:56
поделиться