[原创] InputStream读取多次导致的Unexpected end of ZLIB input stream问题

有一次,在一个程序中,对jar包里的一个文本文件使用如下方式来读取:

InputStream fin = getClass().getResourceAsStream("/file_to_read.txt");

然后在后面的代码中,对 fin 进行读取:

BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
    //TODO: your code here
}

读一次是没有问题的,但如果对同一个InputStream对象读取两次,就会报类似于下面的错误:

Error: java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.ZipFile$1.fill(ZipFile.java:239)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)

文章来源:http://www.codelast.com/
其实InputStream只能读取一次,InputStream里的数据就像一个杯子里的水,倒出来(读一遍)之后就没了,不能读两次。

如果非要读两次,就用同样的方法再生成一个InputStream对象即可。

文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤ 
转载需注明出处:codelast.com 
感谢关注我的微信公众号(微信扫一扫):

wechat qrcode of codelast

发表评论