java IO之AutoCloseable,Closeable和Flushable接口
来源:互联网 发布:sql server inner join 编辑:程序博客网 时间:2024/05/23 19:09
有3个接口对于流类相当重要。其中两个接口是Closeable和Flushable,它们是在java.io包中定义的,并且是由JDK5添加的。第3个接口是AutoColseable,它是由JDK7添加的新接口,被打包到java.lang包中。
AutoCloseable接口对JDK7新添加的带资源的try语句提供了支持,这种try语句可以自动执行资源关闭过程。只有实现了AutoCloseable接口的类的对象才可以由带资源的try语句进行管理。AutoCloseable接口只定义了close()方法:
void
close()
throws
Exception
这个方法关闭调用对象,释放可能占用的所有资源。在带资源的try语句的末尾,会自动调用该方法,因此消除了显式调用close()方法的需要。
Closeable接口也定义了close()方法。实现了Closeable接口的类的对象可以被关闭。从JDK7开始,Closeable扩展了AutoCloseable。因此,在JDK7中,所有实现了Closeable接口的类也都实现了AutoCloseable接口。
实现了Flushable接口的类的对象,可以强制将缓存的输出写入到与对象关联的流中。该接口定义了flush()方法,如下所示:
void
flush()
throws
IOException
刷新流通常会导致缓存的输出被物理地写入到底层设备中。写入流的所有I/O类都实现了Flushable接口。
注:关于带资源的try语句的3个关键点:
由带资源的try语句管理的资源必须是实现了AutoCloseable接口的类的对象。
在try代码中声明的资源被隐式声明为fianl。
通过使用分号分隔每个声明可以管理多个资源。
此外请记住,所声明资源的作用域被限制在带资源的try语句中。带资源的try语句的主要优点是:当try代码块结束时,资源(在此时流)会被自动关闭。因此,不太可能会忘记关闭流。使有带资源的try语句,通常可以使源代码更短,更清晰,更容易维护。如例:
package demo;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;/** * AutoCloseable接口,表示一种不再使用时需要关闭的资源。这个接口下只有一个方法,close()。这个方法在try-with- * resource语法下会被自动调用,支持抛出Exception,当然它也鼓励抛出更详细的异常。close()建议不要抛出线程中断的 * InterruptedException。对这个接口的实现,规范强烈建议close()是幂等的,也就是说多次调用close()方法和一次调用的结 * 果是一样的。 * JDK1.7 新特性 * */public class InputStreamReaderTest { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream("src\\fuhd.txt"), "UTF8"), 1024)) { System.out.println(reader.readLine()); } catch (Exception e) { e.printStackTrace(); } //示例,声明自己的两个资源类,实现AutoCloseable接口。 try (MyResource myResource = new MyResource(); MyResource2 myResource2 = new MyResource2()) { myResource.readResource(); myResource2.readResource(); } catch (Exception e) { e.printStackTrace(); } }}class MyResource implements AutoCloseable { @Override public void close() throws Exception { System.out.println("close resource"); } public void readResource() { System.out.println("read resource"); }}class MyResource2 implements AutoCloseable { @Override public void close() throws Exception { System.out.println("close resource2"); } public void readResource() { System.out.println("read resource2"); }}
输出
热度...........................。read resourceread resource2close resource2close resource
- 探究java IO之AutoCloseable,Closeable和Flushable接口
- 探究java IO之AutoCloseable,Closeable和Flushable接口
- 探究java IO之AutoCloseable,Closeable和Flushable接口
- java IO之AutoCloseable,Closeable和Flushable接口
- io中的AutoCloseable,Closeable和Flushable接口
- AutoCloseable, Closeable和Flushable接口
- AutoCloseable,Closeable和Flushable
- JDK 1.7 java.io 源码学习之Closeable、Flushable、Appendable接口
- java IO相关API探索之Closeable和InputStream接口
- Java IO之Flushable
- Closeable、Readable、Flushable和Appendable
- AutoCloseable和Closeable的关系
- JDK 1.7 java.io 源码学习之AutoCloseable接口和try-with-resources语法
- java IO相关API探索之 AutoCloseable接口
- java.io.Closeable
- java中的Closeable接口
- AutoCloseable与Closeable源码翻译
- The Closeable, Flushable, Readable, and Appendable interfaces
- springmvc-filter与Interceptor的区别
- Grunt 新手一日入门
- github使用入门 之GIT GUI Windows版
- 初识飞思卡尔芯片-imx6系列
- Mybatis中的StatementType
- java IO之AutoCloseable,Closeable和Flushable接口
- linux命令和shell
- opencart 2.3全面伪静态
- Objective-C Runtime
- 【LeetCode】C# 91、Decode Ways
- 解决 s.dependency 'AFNetworking' 出现 Property with 'retain (or strong)' attribute must be of object typ
- linux下使用 du查看某个文件或目录占用磁盘空间的大小
- ansible 普通用户执行root权限 su
- linux安装APScheduler