Java - застрял при чтении из inputtream - PullRequest
1 голос
/ 03 февраля 2012

Здравствуйте. В настоящее время я работаю с сокетами и потоками ввода / вывода.У меня странная проблема с циклом, который я использую для отправки байтов.По какой-то причине он застревает, когда пытается прочитать поток ввода, когда он должен остановиться.У кого-нибудь есть идеи, что не так?

     int bit;
     final byte[] request = new byte[1024];

     if (response instanceof InputStream)
     {   
         while ((bit = response.read(request)) > 0) { // <-- Stuck here
             incoming.getOutputStream().write(request,0,bit);
             incoming.getOutputStream().flush();
         }
     }   
     incoming.close();

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

InputStream.read блокирует до тех пор, пока не будут доступны входные данные, не обнаружен конец файла или не сгенерировано исключение.

Вы не поймали исключение и не проверяли EOF.

0 голосов
/ 03 февраля 2012

То, что я сделал в прошлом, чтобы оставить каждую сторону открытой, это добавить символ завершения в конец каждого сообщения, которое вы не ожидаете увидеть в сообщении.Если вы создаете сообщения самостоятельно, вы можете использовать такой символ, как ; или, возможно, двойные трубы или что-то еще ||.Затем просто проверьте этот символ на принимающей стороне.Просто обходной путь.Не решениеЭто было необходимо в моем случае, но не для вас.

...