Я пишу простой прокси на Java. У меня проблемы с чтением всего данного запроса в байтовый массив. В частности, в следующем цикле вызов «чтения» блокируется, даже если клиент отправил все данные, которые он будет отправлять (то есть конец потока никогда не достигается). Так как я не могу быть уверен, что пришло время начинать писать вывод, пока я не прочитал весь ввод, это вызывает некоторые проблемы. Если я прерву соединение с сервером, конец потока, наконец, будет достигнут, и все пройдет без проблем (все данные с клиента, в данном случае Firefox, запрашивающий www.google.com, были прочитаны сервером и он может обработать его по мере необходимости, хотя, очевидно, он не может ничего отправить обратно клиенту).
public static void copyStream(InputStream is, OutputStream os) throws IOException
{
int read = 0;
byte[] buffer = new byte[BUFFER_SIZE];
while((read = is.read(buffer, 0, BUFFER_SIZE)) != -1)
{
os.write(buffer, 0, read);
}
return;
}
InputStream поступает из клиентского сокета (getInputStream (), затем буферизируется) напрямую; OutputStream является ByteArrayOutputStream.
Что я делаю не так?