Jon*_*Jon 0 java file-io inputstream try-finally
这是我在网上找到的一个Java示例:
try{
//use buffering
InputStream file = new FileInputStream("quarks.ser");
InputStream buffer = new BufferedInputStream(file);
ObjectInput input = new ObjectInputStream (buffer);
try{
//deserialize the List
List<String> recoveredQuarks = (List<String>)input.readObject();
//display its data
for(String quark: recoveredQuarks){
System.out.println("Recovered Quark: " + quark);
}
}
finally{
input.close();
}
} catch(ClassNotFoundException ex){
//some exception handling
}
Run Code Online (Sandbox Code Playgroud)
在上面,使用try-finally块在关闭输入之前使用输入执行某些处理有什么好处?换句话说,上面的代码对这样的东西有什么好处:
try{
//use buffering
InputStream file = new FileInputStream("quarks.ser");
InputStream buffer = new BufferedInputStream(file);
ObjectInput input = new ObjectInputStream (buffer);
List<String> recoveredQuarks = (List<String>)input.readObject();
for(String quark: recoveredQuarks){
System.out.println("Recovered Quark: " + quark);
}
input.close();
} catch(ClassNotFoundException ex){
//some exception handling
}
Run Code Online (Sandbox Code Playgroud)
有一个很大的不同:想象一下以下情况
InputStream file = new FileInputStream("quarks.ser");
InputStream buffer = new BufferedInputStream(file);
ObjectInput input = new ObjectInputStream (buffer);
try{
//do sth
throw new RuntimeException();
//do sth else
}
finally{
input.close();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,使用finally块,抛出异常,但执行finally块并因此关闭输入.
如果您的代码是
InputStream file = new FileInputStream("quarks.ser");
InputStream buffer = new BufferedInputStream(file);
ObjectInput input = new ObjectInputStream (buffer);
//do sth
throw new RuntimeException();
//do sth else
input.close();
Run Code Online (Sandbox Code Playgroud)
您的InputStream无法正常关闭.
但是从Java 7开始,最优雅的版本就是使用try-with-resources,正如您对问题的评论中所提到的:
try (InputStream file = new FileInputStream ("quarks.ser");
InputStream buffer = new BufferedInputStream (file);
ObjectInput input = new ObjectInputStream (buffer);) {
//do sth
throw new RuntimeException ();
//do sth else
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |