java流关闭
❶ java中为什么先关闭输出流后关闭输入流
不绝对,要看依赖关系,先关被依赖的流,谁是被依赖的,就先关谁,比如代码中从文件A读出内容,然后写入文件B , 这个时候读A 要用输入流 ,往B写要用输出流,必须要先从A读出,然后才能往B写,所以,这个场景下,输出流 依赖 输入流,操作完关流的时候就要先关被依赖的输入流,再关输出流。
还有,如果关流操作在finally块中进行,顺序就无所谓了。
如果输入流和输出流完全没有依赖关系,那关流顺序就更没关系了,看心情就好。
❷ 大佬们,关于java IO流关闭的一点疑问,求大佬们帮帮忙
如果上面没有对流进行手动关闭的话,finally方法中的fis一定不为空
❸ java 是什么控制流的打开和关闭的
您好,提问者:
io:reader、writer和outpustream、inputstream需要打开和关闭。
再就是数据库connection等都需要及时关闭。
❹ Java中,static代码块创建的IO流需要手动关闭吗
IO 流除了可以手动关闭外,在垃圾回收这个对象的时候也会自动关闭。
但系统进行垃圾回收的时机是不确定的,static 代码块执行完后,不会马上进行回收。在这段时间内,会造成无用的内存及IO等其他资源占用。所以最好还是用完即关。
推荐写在 try 里,try 块执行完自动关闭。
❺ 为什么在java中打开流后一定要关闭流好像关不关没有不同,程序的结果都是一样的。。。
这跟资源的占用有关
比如你将一个100MB的word文档转换成流,然后进行分析存储到数据库一样
它是将这100MB的东西读到内存,然后进行处理,如果你在使用的时候不关闭
那么java就认为你是一直在使用
而不进行垃圾回收
那么就占你100MB的内存
这样有可能导致内存溢出
❻ 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流中先关闭输出流还是先关闭输入流为什么
java中需要手动释放的资源常见的有以下两个:
流相关资源
流相关资源一般遵循:
1)先开后关,先开的输入流,再开的输出流,通过读取输入流写入输出流中,那么应该先关输出流,再关输入流,但是一般关闭输入输出流操作都是在读写完成后的finally中执行的,所以即使先关输入流,再关输出流也不会任何问题,因为读写操作没有进行了。
2)先关外层,再关内层。如BufferedInputStream包装了一个FileInputStream,那么先
关BufferedInputStream,再关FileInputStream。但要注意的是由于一般处理流持有节点流引用,处理流都会在自己的close方法中去关闭节点流,因此我们只要关闭外层的处理流即可,如果多此一举的关闭节点流反而会报错。如BufferedInputStream包装了FileInputStream,我们只要关闭BufferedInputStream即可
3)只关处理流,不关节点流,原因见上述第二条
流相关文章参考:http://blog.csdn.net/u012250875/article/details/78341874
jdbc相关资源
Connection,PrepareStatement,ResultSet三个资源。这三个资源的获取顺序是:
先获得一个jdbc连接对象Connection,再通过连接对象获得一个sql预处理对象PrepareStatement,如果是查询的话最后还会通过PrepareStatement对象获取一个结果集ResultSet对象,关闭顺序与获取顺序正好相反。先关ResultSet,再关PrepareStatement,最后关Connection。
❽ java 关闭流的作用
关闭流主要是为了释放资源,虽然java有自动回收垃圾资源的功能,但是如果不关闭流,可能(只是可能)会影响自动回收的效果,造成内存大量占用。另外一个重要的原因,如果不关闭流,可能会被其他的语句访问该数据流,造成数据错误。
❾ java关闭流的顺序影响程序结果
bw是缓冲流,使用bw.write 后,数据并没有直接写入txt文件中,而是在bw的缓冲区内,所以这时先关闭输出流fw,则txt中就是空的了,如果先关闭bw,则缓冲流会在内部先调用bw.flush();将缓冲区的内容输出到文件中,所以txt才有内容。要解决这个问题,需要在bw.write 后显示调用bw.flush();这样先关闭那个流都一样了
❿ 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