我加载了一个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);
}
}
答案 0 :(得分:2)
这个问题有三个部分:
Q1:是否应该忽略(压缩)异常?
我认为答案是......&#34;它取决于&#34;。
如果异常原因已知并且您可以准确地捕获它(即没有捕获具有不同原因的异常)并且正确的事情是忽略它然后...... IMO ...是的它是可接受的。< / p>
否则。否。
Q2:在这种情况下IOException意味着什么,重要吗?
答案是它一点也不清楚。在正常情况下,在关闭输入流时不会期望IOException,并且很难知道它可能意味着什么。直觉上它可能是无害的。另一方面,如果你不知道什么可能会引起什么,很难说它是否重要。
问题3:您是否应该忽略此IOException?
我会说不。但我会像这样处理它:
} catch (IOException ex) {
// possibly log the exception here.
throw new AssertionError("Unexpected exception", ex);
}
理由是,如果发生了一些完全出乎意料 的事情,那么如果开发人员/维护人员能够找到并弄清楚如何处理它将是一件好事。
另一方面,如果您可以进行先验评估,任何IOException
此处无害,那么只需记录(甚至压缩)就足够了。
答案 1 :(得分:0)
永远不要忽视异常,即使没有出错。这是虫子的种子。
如果你不需要做任何动作,那么你想要做的就是打印它的堆栈跟踪。
e.printStackTrace();
您可以随时忽略它,但从长远来看可能对您有帮助。
答案 2 :(得分:0)
使用自Java 7以来存在的try
语法:
try (BufferedInputStream bStream = httpGateway.loadContents();) {
cachedContent = xmlParser.parseVideos(bStream);
}
使用此功能,您无需手动拨打.close()
。
你应该捕获try
块中抛出的所有异常。
答案 3 :(得分:0)
这意味着该流(可能)仍然是开放的,无论这是您程序中的问题,只有您知道。至少你应该记录异常,否则你可能会得到难以察觉的奇怪结果。
您可能还想查看不会造成这种困境的$('#gameid')
语法:
try-with-resources
答案 4 :(得分:0)
在Effective Java中,Joshua Bloch将此作为您可能想要记录和忽略的异常的示例。然而,他说,一般来说,你想做的不仅仅是记录异常。