黑马程序员技术交流社区

标题: java的基础的问题-- 关闭IO流的问题5 [打印本页]

作者: 张庚    时间: 2013-2-4 12:35
标题: java的基础的问题-- 关闭IO流的问题5
本帖最后由 张向辉 于 2013-2-15 20:20 编辑

先看这一段代码:
import java.io.IOException;   
<BR>import java.io.InputStream;   
import java.net.URL;   

public class TestStream {   
      
   public static void main(String args[]){   
           
      try {   
          URL host = new URL("http://www.baidu.com");   
           InputStream in = host.openStream();   
           in.read();   
           in.close();   
           System.out.println("asscii: "+in.read());   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
   }   
}  

打印结果: asscii: -1

我读取数据后,关闭了输入流,继续读,它却没有抛异常,不过读取结果为-1。再看这段代码:
import java.io.BufferedReader;   
import java.io.IOException;   
import java.io.InputStreamReader;   
import java.net.URL;   

public class TestStream {   
      
    public static void main(String args[]){   
           
        try {   
           URL host = new URL("http://www.baidu.com");   
           BufferedReader reader = new BufferedReader( new InputStreamReader(host.openStream()));   
            reader.read();   
           reader.close();   
           System.out.println("asscii: "+reader.read());   
       } catch (IOException e) {   
           e.printStackTrace();   
       }   
   }   
}  

结果这里关闭流后再读就抛异常了。InputStream关闭流后再读返回结果为 -1 ,BufferedReader 关闭流后再读抛异常,为什么呢
作者: 曾钦    时间: 2013-2-4 13:35
终于可以发言了。。这个问题查看下JDK 的API后就发现了一点。

关于inputstream中的close方法的注释:

public void close()
           throws IOException关闭此输入流并释放与该流关联的所有系统资源。
InputStream 的 close 方法不执行任何操作。

现在是不是明白了。。


作者: 曾钦    时间: 2013-2-4 13:38
进入源码看了下:
inputstream的close方法:
public void close()
        throws IOException
    {
    }
是空的。{:soso_e113:}
作者: 张庚    时间: 2013-2-4 13:49
somebodydie 发表于 2013-2-4 13:38
进入源码看了下:
inputstream的close方法:
public void close()

谢谢  那我在看看
作者: 曾钦    时间: 2013-2-4 15:36
ykglove 发表于 2013-2-4 14:41
楼主你好,BufferedReader 关闭的是上层的流对象,即InputStream的流对象,它本身只是一个包装类,关闭资源 ...

:lol 分析的不错。~ 有个疑问,请教下。。不知道为什么。。多次运行结果不一样。。
很多时候会输出:
asscii: 33

是什么原因呢?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2