从 request.getInputStream() 读取字符时出现 java.io.IOException : Stream closed or Underlying input stream returned zero bytes,

标签 java tomcat exception servlets

我有一个 Servlet,其请求率约为 10,000 个请求/小时。

其中,我经常在同一行遇到这两个异常之一,大约每天 5 到 6 次,但不是每次调用此 Servlet 时都会出现。

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();

注意:流在代码末尾正确关闭。

是因为请求率高吗?如果有的话请提供解决方案/建议。

最佳答案

正如 @jtahlborn 在评论中正确提到的,

代码中没有错误。这种情况主要发生在客户端关闭/中断连接或者可能是您无法控制的网络中断/缓慢时.

幸运的是,我再也没有遇到过这个错误。

关于从 request.getInputStream() 读取字符时出现 java.io.IOException : Stream closed or Underlying input stream returned zero bytes,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25164932/

相关文章:

c++ - 在 C++ 中,是否可以抛出不会被 std::exception 捕获的异常?

java - 通过 log4j 将 printStackTrace() 发送到文件而不捕获异常

java.lang.ClassCastException : android. app.Application - 类型转换

java - 代码中有一些设计模式吗?

java - System.getenv() 环境变量存在时返回 null

java - Tomcat中session修改的SessionListener

tomcat - Tomcat 8 是否支持 Java 8?

java - 如何将文本从一个 Jtextarea 复制到另一个 jtextarea?

tomcat - 如何让 LDAP 搜索使用 Kerberos 票证来避免明文密码

java - 使用 Geotools 将修改后的形状内容保存到 PostGIS 失败并出现 NullPointerException