Нужно ли обрабатывать или игнорировать IOException, запускаемое функцией OutputStream close ()? - PullRequest
5 голосов
/ 14 декабря 2011

В следующем коде функция close для outPutStream создает исключение IOException, которое я должен отловить. Мой вопрос: мне нужно с этим справиться? Поскольку я работаю с мобильными устройствами, и я хочу убедиться, что я освобождаю все ресурсы, которые я использую, или я могу смело игнорировать исключение.

//...
OutputStream output = null;
try {
     output = connection.getOutputStream();
     output.write(query.getBytes(charset));
} finally {
     if (output != null) try { 
        output.close(); 
     } catch (IOException e) {
        // Do i need to do something here ?
     }
}

Ответы [ 4 ]

7 голосов
/ 14 декабря 2011

Если закрытие не работает, что вы можете сделать?

Единственное, что вы можете сделать, это просто зарегистрировать исключение, и, как предложил @mprabhat, вы можете установить ссылку на ноль, чтобы ускоритьGC.

3 голосов
/ 14 декабря 2011

В документации java не детально описано, при каких условиях закрытие всех условий будет выбрасывать IOException, поэтому мало что можно сделать.

По крайней мере, вы можете установить для ссылки OutputStream значение null и зарегистрировать исключение.

0 голосов
/ 03 июня 2017

В Effective Java Джошуа Блох упоминает об этом как об одном из исключений, которые вы можете игнорировать.В целом, по его словам, вы хотите делать больше с исключениями, чем просто регистрировать их.

0 голосов
/ 14 декабря 2011

В худшем случае вы можете дать предупреждение. Но, как правило, такие исключения вызываются при попытке закрыть уже закрытый сеанс. В этом случае вам ничего не нужно делать.

...