Как предотвратить сервлет от буферизации содержимого ответа - PullRequest
1 голос
/ 08 марта 2012

У меня есть сервлет, который записывает байты в свой выходной поток.Размер контента может быть большим.Я хочу, чтобы сервлет не делал буферизацию.Каков наилучший способ предотвращения буферизации ответов?Я не хочу вызывать flush () или close () для ServletOutputStream самостоятельно, поскольку я предполагаю, что контейнер сервлета должен сделать это для меня.В этом случае, где находятся байты, если сервлет вызывает flush () и close () и httpclient еще не прочитал байты.

1 Ответ

2 голосов
/ 08 марта 2012

Каждый контейнер сервлета предоставляет реализации за сценой реализаций HttpServletRequest и HttpServletResponse, что означает, что вы понятия не имеете, если внутренняя поддержка impl внутри одного контейнера буферизует записи, а другая нет.

Тем не менее, буферизация будет ограничена небольшим размером в несколько килобайт (если это даже сделано), так что вы можете просто записывать () снова и снова и снова в выходной поток, не беспокоясь о памяти. Impl будет передавать эти байты по сетевому соединению, по проводной связи, на клиент, где сетевое оборудование, операционная система и клиентский код должны выполнять буферизацию и чтение всего содержимого.

TCP позаботится о ACK и автоматически отправит вам любые потерянные данные.

Короче говоря, вам не нужно беспокоиться о клиенте "Catching"; просто запишите свои данные, и все на клиентах и ​​в сочетании с TCP позаботятся о том, чтобы данные там находились.

...