java – 我们应该在关闭缓冲流时忽略IOException吗?

我加载一个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都是无害的,那么只需记录(甚至压缩)就足够了.

点赞