У меня есть следующий код:
BlobDomain blob = mrow.getFileText();
StringBuffer o = new StringBuffer("");
if (blob != null) {
InputStream in = null;
try {
in = blob.getBinaryStream();
byte[] buf = new byte[1024];
int count = 0;
while ((count = in.read(buf)) > 0) {
o.append(new String(buf));
buf = new byte[1024];
}
}catch(Exception e){
}finally{
try{
if(in != null)
in.close();
}catch(Exception ee){}
}
нужен ли blob какой-либо закрытие?
Blob GetBinaryStream требует закрытия?
Возможно, нет. Но в любом случае это хорошая идея.
Однако я настоятельно рекомендую вам использовать синтаксис Java 7+ "попробуйте с ресурсами". Он намного чище, проще, надежнее. Как это:
try (InputStream in = blob.getBinaryStream()) {
byte[] buf = new byte[1024];
int count = 0;
while ((count = in.read(buf)) > 0) {
o.append(new String(buf));
buf = new byte[1024];
}
}
Существует неявное, finally
, что закрывается in
потоке и имеет дело с исключениями, которые могут быть выброшены в close()
вызова.
нужен ли blob какой-либо закрытие?
В Connection
, Statement
и/или ResultSet
вам нужно, чтобы Blob
был "управляемым". Если вы сделаете это правильно, я не думаю, что Blob
нужно управлять дальше... хотя вы можете дополнительно free()
его для выпуска ресурсов раньше.
Я надеюсь, что обработка исключений в вашем коде не похожа на ваш реальный код. В обработке исключений вы делаете две вещи:
Вы "раздавите" исключения; то есть поймать их и выбросить все доказательства. Это делает отладочную работу после очень сложной работы.
Catching Exception
- почти всегда ошибка. Вы можете поймать всевозможные исключения, которые вы не ожидаете; например, NPE, вызванные ошибками в вашем коде.
Выполнение обоих этих вещей в то же время... ДЕЙСТВИТЕЛЬНО ПЛОХО.
И если вы настаиваете на том, чтобы вручную управлять ресурсами (закрытием), вы должны сделать это в блоке finally
. (Читайте об этом в учебнике по Java и т.д.)