java.io.IOException: поток закрыт или базовый входной поток возвратил ноль байтов при чтении символа из request.getInputStream ()

1

У меня есть Servlet, у которого есть соотношение запросов около 10 000 запросов/час.

В котором я получил одно из этих двух исключений часто на той же линии, которая составляет около 5-6 раз, но не каждый раз, когда вызывается этот сервлет.

java.io.IOException: Stream closed
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:312)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:200)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:154)
    at java.io.BufferedReader.read1(BufferedReader.java:205)
    at java.io.BufferedReader.read(BufferedReader.java:279)

или

java.io.IOException: Underlying input stream returned zero bytes
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:287)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.BufferedReader.fill(BufferedReader.java:154)
        at java.io.BufferedReader.read1(BufferedReader.java:205)
        at java.io.BufferedReader.read(BufferedReader.java:279)

Оба исключения встречаются в одной строке. Я не знаю, почему? Тот же тип всех запросов отменяется и получает ответ успешно.

Вот мой код:

InputStream ist = request.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(ist));
StringBuffer sb = new StringBuffer();
char[] c = new char[1];
while(in.read(c, 0, 1) == 1)  // Getting exception at this line
{
    sb.append(c[0]);
}
String payload = sb.toString();

Примечание. Потоки правильно закрыты в конце кода.

Это из-за высокого соотношения запросов? Дайте решение/предложение, если у вас есть.

  • 0
    Поток закрыт. Вы закрыли это?
  • 0
    Нет, это не проблема. Закрытие потока обрабатывается правильно, что вызывается в конце всего процесса. Поэтому я специально упомянул, что получаю это исключение только 5-6 раз в день, а не для всех запросов.
Показать ещё 6 комментариев
Теги:
servlets
tomcat
exception

2 ответа

0
Лучший ответ

Поскольку @jtahlborn справедливо упоминается в комментарии,

В коде отсутствует ошибка. Это происходит в основном, когда клиент closed/broke соединение или, возможно, interruption/slowness которые вы не можете контролировать.

К счастью, я никогда не сталкивался с этой ошибкой снова.

0

У меня была ошибка, подобная этой, где я получил "java.io.IOException: Stream closed" (ServletException). После тестирования каждой части службы отдельно я понял, что каким-то образом метод POST вызывает ошибку. Я заменил метод GET, и ошибка исчезла. Случай был аналогичным, получив ошибку один раз во время (например, 4-5 раз в час для запроса с задержкой 30 секунд). Теперь, через пару дней, я больше этого не видел.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню