При работе с Sockets в Java, как вы можете определить, завершил ли клиент отправлять все (двоичные) данные, прежде чем вы сможете начать их обрабатывать. Рассмотрим, например:
istream = new BufferedInputStream (socket.getInputStream());
ostream = new BufferedOutputStream(socket.getOutputStream());
byte[] buffer = new byte[BUFFER_SIZE];
int count;
while(istream.available() > 0 && (count = istream.read(buffer)) != -1)
{
// do something..
}
// assuming all input has been read
ostream.write(getResponse());
ostream.flush();
Я читал подобные сообщения на SO, такие как this, но не смог найти окончательного ответа. Хотя мое решение выше работает, я понимаю, что вы никогда не можете сказать, завершил ли клиент отправлять все данные. Если, например, клиентский сокет отправляет несколько фрагментов данных, а затем блокирует ожидание данных из другого источника данных, прежде чем он сможет отправить больше данных, приведенный выше код вполне может предположить, что клиент завершил отправку всех данных с istream.available() будет возвращать 0 для текущего потока байтов.