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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毛羚杨 中级黑马   /  2014-2-13 15:18  /  1105 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {

                ByteArrayInputStream bis = new ByteArrayInputStream("abcedf".getBytes());
               
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
               
                int ch = 0;
               
                while((ch=bis.read())!=-1){
                        bos.write(ch);
                }
               
                System.out.println(bos.toString());
                bis.close();
                bos.close();
        }

这段代码演示了ByteArrayInputStream的流对象,很简单,但是就是在操作流的关闭的时候需要对异常进行处理, 这个是怎么回事?一般我们在操作流对象的时候,都会有关流的习惯,这个流不关会不会造成资源的浪费?

评分

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

查看全部评分

5 个回复

倒序浏览
ByteArrayInputStream是一个流 是流就自然用到了IO 是IO 就要进行异常处理 要么抛 要么try
我修改了一下LZ的代码
  1. import java.io.ByteArrayInputStream;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.IOException;

  4. public class AAA{
  5. public static void main(String[] args) {
  6.                
  7.                 ByteArrayInputStream bis = null;
  8.                
  9.                 ByteArrayOutputStream bos = null;
  10.                
  11.                 try {
  12.                                         bis = new ByteArrayInputStream("abcedf".getBytes());
  13.                                         bos = new ByteArrayOutputStream();
  14.                                         int ch = 0;
  15.                                         while ((ch = bis.read()) != -1) {
  16.                                                 bos.write(ch);
  17.                                         }
  18.                                         System.out.println(bos.toString());
  19.                                 } catch (Exception e) {
  20.                                         throw new RuntimeException("输出失败");
  21.                                 }
  22.                                 finally
  23.                                 {
  24.                 try {//这里进行分别处理
  25.                                         bis.close();
  26.                                 } catch (IOException e) {
  27.                                        
  28.                                         throw new RuntimeException("读取关闭失败");
  29.                                 }
  30.                 try {//这里进行分别处理
  31.                                         bos.close();
  32.                                 } catch (IOException e) {
  33.                                        
  34.                                         throw new RuntimeException("输出关闭失败");
  35.                                 }
  36.                 }
  37.         }
  38. }
复制代码

这里关流因为是必须要执行的所以进行finally 处理
每个closed也都要try一下
2 不关闭我认为肯定会造成资源浪费 而这块里面垃圾处理机制应该是无法处理的

评分

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

查看全部评分

回复 使用道具 举报
kira 发表于 2014-2-13 15:56
ByteArrayInputStream是一个流 是流就自然用到了IO 是IO 就要进行异常处理 要么抛 要么try
我修改了一下LZ ...

我感觉也是的 毕竟这个是开了流 的  不关闭按照常理来说肯定会造成资源的浪费,不过话又说来java的垃圾回收机制个人认为还是比较好的 是不是能够处理这个还有待深究啊
回复 使用道具 举报
毛羚杨 发表于 2014-2-13 15:59
我感觉也是的 毕竟这个是开了流 的  不关闭按照常理来说肯定会造成资源的浪费,不过话又说来java的垃圾回 ...

应该是处理不了的 我的映像中处理机制可以处理无用的类和参数进行回收分配资源
而流这点提都没提
回复 使用道具 举报 1 0
kira 发表于 2014-2-13 16:00
应该是处理不了的 我的映像中处理机制可以处理无用的类和参数进行回收分配资源
而流这点提都没提 ...

的确是的 没有关于这个的回收,那最好还是关闭比较好吧
回复 使用道具 举报
毛羚杨 发表于 2014-2-13 16:08
的确是的 没有关于这个的回收,那最好还是关闭比较好吧

嗯 一般的最好是关了 除了net流的服务器这种
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马