Apache common-io AutoCloseInputStream 分析
Apache common-io 包是常用的工具包,他提供了对IO操作的一些封装。首先看一下input包下的 AutoCloseInputStream 类
1: * This class is typically used to release any resources related to an open
2: * stream as soon as possible even if the client application (by not explicitly
3: * closing the stream when no longer needed) or the underlying stream (by not
4: * releasing resources once the last byte has been read) do not do that.
5: *
6: * @version $Id: AutoCloseInputStream.java 1304052 2012-03-22 20:55:29Z ggregory $
7: * @since 1.4
8: */
9: public class AutoCloseInputStream extends ProxyInputStream
这个类的作用是自动关闭使用的流,具体的实现是每次 read 的时候,都判断一下是否返回的是 -1,是就立马关闭。
@Override
protected void afterRead(int n) throws IOException {
if (n == -1) {
close();
}
}
实现非常简单,但是这里提供了一个非常好的设计。首先,实现了一个抽象类ProxyInputStream,继承该类,通过集成该抽象类,只需要很简单重写 afterRead 类就可以达到每次read 都判断是否应该关闭。

在ProxyInputStream中的所有read方法中,在read之前之后分别调用 beforeRead 以及 afterRead方法,这样在之类中通过覆写 beforeRead 以及 afterRead方法,来做我们想做的事情。
protected void beforeRead(int n) throws IOException {
}
protected void afterRead(int n) throws IOException {
}
@Override
public int read() throws IOException {
try {
beforeRead(1);
int b = in.read();
afterRead(b != -1 ? 1 : -1);
return b;
} catch (IOException e) {
handleIOException(e);
return -1;
}
}
@Override
public int read(byte[] bts, int off, int len) throws IOException {
try {
beforeRead(len);
int n = in.read(bts, off, len);
afterRead(n);
return n;
} catch (IOException e) {
handleIOException(e);
return -1;
}
}
所以在AutoCloseInputStream 中,只通过重写了 afterRead方法,每次read都判断是否为 –1 ,是则关闭流。
Apache common-io AutoCloseInputStream 分析的更多相关文章
- .apache.commons.io 源代码学习(二)FilenameUtils类
FilenameUtils是apache common io中一个独立的工具类,对其他没有依赖,看其源代码的import即可知道. import java.io.File;import java.io ...
- apache commons io包基本功能
1. http://jackyrong.iteye.com/blog/2153812 2. http://www.javacodegeeks.com/2014/10/apache-commons-io ...
- IO与文件读写---使用Apache commons IO包提高读写效率
觉得很不错,就转载了, 作者: Paul Lin 首先贴一段Apache commons IO官网上的介绍,来对这个著名的开源包有一个基本的了解:Commons IO is a library of ...
- apache commons io入门
原文参考 http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html Apache Commons IO 包绝对是 ...
- org.apache.common.io-FileUtils详解
org.apache.common.io---FileUtils详解 getTempDirectoryPath():返回临时目录路径; public static String getTempDire ...
- java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream(转)
java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream 使用Tomcat的Manag ...
- .apache.commons.io 源代码学习(一)
java的初学者,准备通读各种高水平源代码,提升能力. 为了避免自己的惰性,写博客. 版本:2.5 开发平台:netbeans. 今天是第一天,网上先看个例子:http://www.importnew ...
- WEB文件上传之apache common upload使用(一)
文件上传一个经常用到的功能,它有许多中实现的方案. 页面表单 + RFC1897规范 + http协议上传 页面控件(flash/html5/activeX/applet) + RFC1897规范 + ...
- [解决]Hadoop 2.4.1 UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0
问题:UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0 我的系统 win7 64位 Hadoop ...
- SEQ!org.apache.hadoop.io.LongWritable
[uhadoop@10-13-109-236 subdir26]$ $HADOOP_HOME/bin/hadoop fs -cat /data/flumeEvents/FlumeData.155980 ...
随机推荐
- [Java]如何把Soap Message装成一个String对象
代码片段 // Create transformer TransformerFactory tff = TransformerFactory.newInstance(); Transformer tf ...
- python中各种转义字符
转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \’ 单引号 \” 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \t 横向制 ...
- visual studio检查运算上溢/下溢的开关位置
[注意] 勾选这个选项会对应用程序的整体性能造成一些影响,但是会更加安全.具体情况根据项目需求来决定.
- poj3040 发工资(贪心)
题目传送门 题目大意:给一个人发工资,给出不同数量不同面额,(大面额一定是小面额的倍数),问最多能发几天,(每天实发工资>=应发工资). 思路:首先,将大于等于c的面额的钱直接每个星期给奶牛一张 ...
- dedecms 的采集
http://www.360doc.com/content/14/0521/09/13870710_379547377.shtml http://www.360doc.com/content/14/0 ...
- Java String 字符串操作小结
// 转载加编辑 -- 21 Apr 2014 1. Java字符串中子串的查找 Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现 ...
- IOS开发-基于WebDriverAgent代理服务,实现iOS手机app自动化测试的框架搭建
导引 iOS自动化测试一直使用的appium,iOS系统升级至10.0 Xcode8.0之后,改用WebDriverAgent代理服务作为server,编写了一套基于WebDriverAgent服务 ...
- 简单的Web日志分析脚本
前言 长话短说,事情的起因是这样的,由于工作原因需要分析网站日志,服务器是windows,iis日志,在网上找了找,github找了找,居然没找到,看来只有自己动手丰衣足食. 那么分析方法我大致可分为 ...
- Python 初识爬虫-**机场出港业务
# -*- coding:utf-8 -*- from lxml import etree import requests ##先进单页测试,然后在进行多页循环 没有解决的问题,动态解决最大页数,目前 ...
- Linux中的netstat命令详解
功能说明 netstat是基于Netstat这个命令行工具的指令,它可以用来查询系统上的网络套接字连接情况,包括tcp,udp以及Unix套接字:另外它还能列出路由表,接口状态和多播成员等信息. 主要 ...