Blob GetBinaryStream требует закрытия?

1

У меня есть следующий код:

       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 какой-либо закрытие?

  • 2
    Просто предположите, что все входные потоки должны быть закрыты, тогда вам не нужно помнить, какие из них не нужны.
  • 0
    Я всегда закрываю ресурсы. Если они не нуждаются в закрытии, то это не принесет никакого вреда. Но если они требуют закрытия, то не закрытие их действительно плохо
Показать ещё 2 комментария
Теги:
blob

1 ответ

2

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 и т.д.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню