Метод Java InputStream.read (byte [], int, int), как блокировать до тех пор, пока не будет прочитано точное количество байтов

Я пишу простое сетевое приложение клиент / сервер, которое отправляет и принимает сообщения фиксированного размера через сокет TCP.

До сих пор я использовал методы getInputStream () и getOutputStream () класса Socket , чтобы получить потоки, а затем вызвать read (byte [] b, int off, int len) класса InputStream для чтения 60 байт каждый раз (что является размером сообщения).

Позже я прочтите Javadoc для этого метода:

public int read (byte [] b, int off, int len) выбрасывает IOException

Считывает до len байтов данных из входного потока в массив байты. Предпринята попытка прочитать до len байтов , но меньшего размера. номер можно прочитать . Фактически прочитанное количество байтов возвращается как целое число.

Мне было интересно, есть ли какое-нибудь "готовое" решение Java для блокировки до тех пор, пока не будут прочитаны len байтов, ожидая вечно, если необходимо.

Я, очевидно, могу создать простой цикл, но я чувствую, что изобретаю велосипед заново. Можете ли вы предложить мне чистое решение с поддержкой Java?

10
задан gd1 20 August 2011 в 11:16
поделиться