测试:
test方法传入一个参数 BufferedReader,然后循环执行test(br) 即 while(test(br));
有两种实现方法:
方法(1)正确,方法(2)会出现java.io.IOException异常!
(1)先在外部包装好fis,再传入br
BufferedReader br= new BufferedReader(new InputStreamReader(fis));
public static boolean test(BufferedReader br) throws Exception{
i++;
System.out.println(br.readLine());
if(i>2){
i = 0;
return false;
}
return true;
}
(2)传入fis,每次新建一个br去包装它
public static boolean test2(InputStream ips) throws Exception{
BufferedReader br= new BufferedReader(new InputStreamReader(ips));
j++;
//TODO 当第二次包装ips时,其ips.available()为0
System.out.println(ips.available());
System.out.println(br.readLine());
br.close();
if(j>2){
j = 0;
return false;
}
return true;
}
由此可知,采用方法(1),不仅是因为效率问题!
文件流一旦被包装,外层的包装类就获取了整个流;由于流已经读到末尾,再次包装该流,则什么也拿不到。