您的位置:

请教有关java流关闭的问题,java 流关闭

本文目录一览:

java中IO流操作怎样关闭流

如果 in == null,就说明 in这个引用所指向的对象还没有被创建,自然 in.close()也就不可能被执行,而且会报异常。我是这样想的,程序中 如果你先声明变量

InputStream(或者其他流类型) in = null;

然后执行其他语句,再 in = new 、、、、

在in new之前其他语句出exception,这时流没有被打开,也就无需关闭,如果不判断if(null != in) 硬要关闭in就出exception

另外你的代码按如下写会更合理:

if(null != in){

try{

in.flush();

in.close();

in = null;

}

catch(IOExection e){};

}

Java中的io流关闭问题

如下例子代码:

FileInputStream is = new FileInputStream(".");

BufferedInputStream bis = new BufferedInputStream(is);

bis.close();

从设计模式上看:

java.io.BufferedInputStream是java.io.InputStream的装饰类。

BufferedInputStream装饰一个 InputStream 使之具有缓冲功能,is要关闭只需要调用最终被装饰出的对象的 close()方法即可,因为它最终会调用真正数据源对象的 close()方法。

BufferedInputStream的close方法中对InputStream进行了关闭,下面是jdk中附带的源代码:

java.io.BufferedInputStream的api:

close

public void close()throws IOException 关闭此输入流并释放与该流关联的所有系统资源。

因此,可以只调用外层流的close方法关闭其装饰的内层流,验证例子:

public static void main(String[] args) throws Exception {

FileOutputStream fos = new FileOutputStream("d:\\a.txt");

OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");

BufferedWriter bw = new BufferedWriter(osw);

bw.write("java IO close test");

bw.close();

}

验证ok

java 关闭流的作用

关闭流主要是为了释放资源,虽然java有自动回收垃圾资源的功能,但是如果不关闭流,可能(只是可能)会影响自动回收的效果,造成内存大量占用。另外一个重要的原因,如果不关闭流,可能会被其他的语句访问该数据流,造成数据错误。