我加载一个xml内容,并将其保存到磁盘.然后我读了它,并尝试解析.
当我成功解析xml时,我应该忽略7行中的IOException吗?
catch (IOException ignore) {}
或者可能会出现一些问题?
private HashMap <String, VideoDto> loadContent(String url){
try {
BufferedInputStream bStream = httpGateway.loadContents();
cachedContent = xmlParser.parseVideos(bStream);
try {
bStream.close();
} catch (IOException ignore) {}
return cachedContent;
} catch (XMLStreamException e) {
throw new IllegalStateException("I/O error during integration", e);
}
}
public BufferedInputStream loadContents() {
URL source = config.getContentPath();
URL target= config.getLastImportedFile();
try {
ReadableByteChannel rbc = Channels.newChannel(source.openStream());
FileOutputStream fos = new FileOutputStream(target.getFile());
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
} catch (MalformedURLException e) {
throw new IllegalArgumentException("Wrong url format", e);
} catch (IOException e) {
throw new IllegalArgumentException("I/O error while saving "+target, e);
}
return createBufferStream(config.getLastImportedFile());
}
private BufferedInputStream createBufferStream(URL url){
try {
return new BufferedInputStream(url.openConnection().getInputStream());
} catch (IOException e) {
throw new IllegalArgumentException(e);
}
}
最佳答案 这个问题分为三个部分:
Q1:是否应该忽略(压缩)异常?
我认为答案是……“这取决于”.
如果异常原因是已知的并且您可以准确地捕获它(即,也没有捕获具有不同原因的异常)并且正确的事情是忽略它然后…… IMO …是的它是可接受的.
除此以外.没有.
Q2:在这种情况下IOException意味着什么,它有什么关系?
答案是,它一点也不清楚.在正常情况下,在关闭输入流时不会期望IOException,并且很难知道它可能意味着什么.直觉上它可能是无害的.另一方面,如果你不知道什么可能会导致什么,很难说它是否重要.
问题3:您是否应该忽略此IOException?
我会说不.但我会像这样处理它:
} catch (IOException ex) {
// possibly log the exception here.
throw new AssertionError("Unexpected exception", ex);
}
理由是,如果发生了一些完全出乎意料的事情,那么如果开发人员/维护人员能够找到并找出如何处理它将是一件好事.
另一方面,如果您可以进行先验评估,这里的任何IOException都是无害的,那么只需记录(甚至压缩)就足够了.