有一次,在一个程序中,对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 streamat 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
感谢关注我的微信公众号(微信扫一扫):