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。那我怎么关?总是关上。事实上,它通过了所有的单元测试。但不能保证,它将在多用户环境中正常工作。