instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例,这个运算符可以用来判断该数据流属于哪一个特定类的子类,从而来统一的管理。同时,该方法参数的选用也便于该方法在一次调用周期内关闭多种多个数据流。
/**
* 关闭一些常见的数据流
*/
public static void streamCloses(Object... streams) {
for (Object o : streams) {
try {
if (o instanceof InputStream) {
((InputStream) o).close();
} else if (o instanceof OutputStream) {
OutputStream os= (OutputStream) o;
os.flush();
os.close();
} else if (o instanceof Writer) {
Writer w= (Writer) o;
w.flush();
w.close();
} else if (o instanceof Reader) {
((Reader) o).close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这一阵子发现上述的方法尚且还有一些缺陷,觉得只关闭一些常见的流,还不能充分发挥他存在的意义。就改了一下思路,从流的实现的上游Closeable和Flushable来关闭他,使之更强大一些。
/**
* 关闭一些常见的数据流2
*/
public static void streamCloses(Object... streams) {
for (Object o : streams) {
try {
if (o instanceof Closeable) {
if (o instanceof Flushable) {
((Flushable) o).flush();
}
((Closeable) o).close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}