Я утверждал бы, что первоочередной задачей не является производительность, но безопасность. Можно сделать много ошибок с массивами (рассмотрите изменение размеров, например), где вектор сохранил бы Вас много боли.
Ваша проблема заключается в кодировании содержимого, «разбитом на части». Это используется, когда длина содержимого, запрошенного с веб-сервера, неизвестна на момент начала ответа. В основном он состоит из количества отправляемых байтов, за которым следует CRLF
, за которым следуют байты. Об окончании ответа сигнализирует точная последовательность, которую вы видите. Теперь веб-сервер ожидает вашего следующего запроса (это также называется «конвейерной обработкой запросов»).
У вас есть несколько возможностей:
Итак, вы читаете из сокета (вы не показываете, что в вашем коде, но это то, что я понял из текста)?
Пока другая сторона не закрывает соединение, Java не знает, что он находится в конце ввода, поэтому readLine ()
ожидает, пока другая сторона отправит дополнительные данные, и не возвращает null
.
Попробуйте GET url HTTP / 1.0
. HTTP / 1.0
сообщает серверу, что вы не можете обрабатывать более одного документа за одно соединение. В этом случае,
Ваш HTTP-запрос неполно без двух пар «возврат каретки + перевод строки». Вероятно, вам также следует вызвать close после отправки запроса:
out.print("GET /index.html HTTP/1.0\r\n");
// maybe print optional headers here
// empty line
out.print("\r\n");
out.flush();
out.close();