Java 理论与实践: 理解 JTS —— 事务简介
2010-03-22 00:00:00 来源:WEB开发网与比较简单的 Java 程序进行类比,事务在应用程序级别所提供的一些优势与 catch 和 finally 块在方法级别所提供的优势相同;它们使我们不用编写很多错误复原代码,即可执行可靠的错误复原。考虑下面这个方法,该方法将一个文件复制到另一个文件:
public boolean copyFile(String inFile, String outFile) {
InputStream is = null;
OutputStream os = null;
byte[] buffer;
boolean success = true;
try {
is = new FileInputStream(inFile);
os = new FileOutputStream(outFile);
buffer = new byte[is.available()];
is.read(buffer);
os.write(buffer);
}
catch {IOException e) {
success = false;
}
catch (OutOfMemoryError e) {
success = false;
}
finally {
if (is != null)
is.close();
if (os != null)
os.close();
}
return success;
}
忽略为整个文件分配一个缓冲区是一个不好的想法,但是在这个方法中哪里错了呢?有很多东西。输入文件可能不存在,或者该用户可能没有这个文件的读权限。用户可能没有输出文件的写权限,或者该文件被另一个用户锁定。可能没有足够的磁盘空间来完成该文件的写操作,或者由于没有足够的内存可用,分配缓冲区可能失败。幸运的是,所有这些都由 finally 语句来处理,该语句释放了 copyFile() 所使用的所有资源。
更多精彩
赞助商链接