A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张庚 中级黑马   /  2013-2-4 12:35  /  2307 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 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 关闭流后再读抛异常,为什么呢

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

4 个回复

正序浏览
ykglove 发表于 2013-2-4 14:41
楼主你好,BufferedReader 关闭的是上层的流对象,即InputStream的流对象,它本身只是一个包装类,关闭资源 ...

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

是什么原因呢?
回复 使用道具 举报
somebodydie 发表于 2013-2-4 13:38
进入源码看了下:
inputstream的close方法:
public void close()

谢谢  那我在看看
回复 使用道具 举报
进入源码看了下:
inputstream的close方法:
public void close()
        throws IOException
    {
    }
是空的。{:soso_e113:}
回复 使用道具 举报
终于可以发言了。。这个问题查看下JDK 的API后就发现了一点。

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

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

现在是不是明白了。。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马