Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Blob GetBinaryStream是否需要关闭?_Java_Oracle_Blob - Fatal编程技术网

Java Blob GetBinaryStream是否需要关闭?

Java Blob GetBinaryStream是否需要关闭?,java,oracle,blob,Java,Oracle,Blob,我有以下代码: BlobDomain blob = mrow.getFileText(); StringBuffer o = new StringBuffer(""); if (blob != null) { InputStream in = null; try { in = blob.getBinaryStream(); byte[] buf = n

我有以下代码:

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

可能不会。但无论如何,关闭它是个好主意

但是,我强烈建议您使用Java7+“使用资源进行尝试”语法。它更干净、更简单、更可靠。像这样:

       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
关闭
流中的
,并处理
close()
调用可能引发的异常

这个blob需要任何形式的关闭吗

连接
语句
和/或
结果集
您从中获得的
Blob
需要“管理”。如果你做得好,我认为不需要进一步管理
Blob
。。。尽管您可以选择
free()
it来更早地释放资源


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

  • 您正在“挤压”异常;i、 抓住他们,扔掉所有的证据。这使得事后调试非常困难

  • 捕捉异常几乎总是一个错误。你可能会捕捉到各种你不希望发生的异常情况;e、 g.由代码中的错误引起的NPE

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


如果您坚持手工进行资源管理(关闭),则应该在
finally
块中进行。(在Java教程中阅读相关内容等)

只要假设所有输入流都需要关闭,那么您就不必记住哪些不需要关闭。我总是关闭资源。如果他们不需要关门,那也不会有什么坏处。但是如果它们确实需要关闭,不关闭它们真的很糟糕。在这种情况下,我看不到一个blob.close。那我怎么关?总是关上。事实上,它通过了所有的单元测试。但不能保证,它将在多用户环境中正常工作。