Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在初始化GZIPInputStream之后,我可以使用实体响应吗?_Java_Gzip_Socketexception_Httpentity - Fatal编程技术网

Java 在初始化GZIPInputStream之后,我可以使用实体响应吗?

Java 在初始化GZIPInputStream之后,我可以使用实体响应吗?,java,gzip,socketexception,httpentity,Java,Gzip,Socketexception,Httpentity,我的程序正在读取这个大的gzip文件,它运行了一个小时左右,但由于以下堆栈跟踪而失败: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:196) at java.net.SocketInputStream.read(SocketInputStream.java:122) at sun.security.ssl.Input

我的程序正在读取这个大的gzip文件,它运行了一个小时左右,但由于以下堆栈跟踪而失败:

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
    at sun.security.ssl.InputRecord.read(InputRecord.java:480)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
    at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:212)
    at org.apache.http.impl.conn.LoggingSessionInputBuffer.read(LoggingSessionInputBuffer.java:82)
    at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:182)
    at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:138)
    at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:238)
    at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
    at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:116)
    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.readLine(BufferedReader.java:317)
    at java.io.BufferedReader.readLine(BufferedReader.java:382)
    at com.trainchaser.feed.connections.StaticConnect.getScheduleFile(StaticConnect.java:116)
    at com.trainchaser.app.App.main(App.java:32)
其中,line
StaticConnect.getScheduleFile(StaticConnect.java:116)
是下面代码中的while循环

我也读过类似的帖子,在读完while循环后,我确实关闭了阅读器(中的
),但它仍然给了我同样的错误。所以我想,如果我消费实体,它可能会工作,就像这样:

    HttpEntity entity=getResponse.getEntity();

    BufferedReader in = new BufferedReader(new InputStreamReader(
                        new GZIPInputStream(entity.getContent())));

   EntityUtils.consumeQuietly(entity);

   try
   {
      while ((content = in.readLine()) != null)
      {...
这样行吗?我在想,如果我暂时存储gzip文件,而不继续分配连接,可能会有助于防止错误。我会自己测试它,但我目前正在测试关闭防火墙的修复程序,看看它是否仍然出错


我正在使用
org.apache.http.HttpEntity
如果它有帮助的话

我快速扫描了apache 4.x http库的源代码,我看不到任何可能导致此调用的内容:

      consumeQuietly(entity);
失败。但是,
调用将关闭底层输入流。。。从
流中
的脚下。如果您继续阅读
中的
,您的代码将得到一个
IOException
。。。下次它需要填充缓冲区时

然而,我怀疑这并不能解释你所看到的例外情况。如果我对
BufferedReader
代码的读取正确,您将看到
IOException(“流关闭”)
,而不是
SocketException

无论哪种方式,在“消费”实体后继续在
中使用
似乎是个坏主意


在初始化实体响应后,我可以使用它吗
BufferedReader

那是另一个问题。是的,你能做到

问题在于,在使用响应后,如何处理读取器。如果你做的不是关闭它,而是自找麻烦。。。国际海事组织



顺便说一下,ApacheHTTP库的源代码和核心JavaIO类都是免费提供的。了解他们将如何表现的最好方法是阅读源代码。。。和我一样。

告诉我们您使用的是哪个http库怎么样?@StephenC,谢谢,我已经相应地编辑了这个问题。啊,好的,谢谢。看来java.net.SocketException的问题在于我是如何将数据从文件插入数据库的。。它花了很长时间,所以它最终重置了它。它被修复了,所以我使用spring事务