Blob GetBinaryStream需要关闭吗?

时间:2015-02-02 22:38:31

标签: java oracle blob

我有以下代码:

       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是否需要任何关闭?

1 个答案:

答案 0 :(得分: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是否需要任何关闭?

ConnectionStatement和/或ResultSet您需要Blob来管理"。如果你这样做,我不认为Blob需要进一步管理......虽然你可以选择free()它来提前释放资源。


我希望您的代码中的异常处理与您的真实代码完全不同。你在异常处理中做了两件坏事:

  • 你是"挤压"例外情况;即抓住他们并扔掉所有证据。这使得事后调试变得非常困难。

  • 捕获Exception几乎总是一个错误。你有责任抓住你不期望发生的各种例外;例如由代码中的错误引起的NPE。

同时做这两件事真是太糟糕了。

如果坚持手动执行资源管理(关闭),您应该在finally块中执行此操作。 (在Java教程中阅读它等)