我有以下代码:
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是否需要任何关闭?
答案 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是否需要任何关闭?
Connection
,Statement
和/或ResultSet
您需要Blob
来管理"。如果你这样做,我不认为Blob
需要进一步管理......虽然你可以选择free()
它来提前释放资源。
我希望您的代码中的异常处理与您的真实代码完全不同。你在异常处理中做了两件坏事:
你是"挤压"例外情况;即抓住他们并扔掉所有证据。这使得事后调试变得非常困难。
捕获Exception
几乎总是一个错误。你有责任抓住你不期望发生的各种例外;例如由代码中的错误引起的NPE。
同时做这两件事真是太糟糕了。
如果坚持手动执行资源管理(关闭),您应该在finally
块中执行此操作。 (在Java教程中阅读它等)