这是我在网上找到的一个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
}
在上面,在关闭输入之前使用 try-finally block 对输入执行一些处理有什么好处?换句话说,上面的代码比这样的代码有什么好处:
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
}
最佳答案
有很大的不同:想象一下以下情况
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();
}
在这种情况下,使用finally block 时,会抛出异常,但finally block 会被执行,并且您的输入因此会关闭。
如果您的代码是
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();
您的输入流无法正确关闭。
<小时/>但是从 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
}
关于java - 使用 try-finally block 处理输入流有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32718129/