gpt4 book ai didi

java - Blob GetBinaryStream 需要关闭吗?

转载 作者:行者123 更新时间:2023-11-30 03:34:36 24 4
gpt4 key购买 nike

我有以下代码:

       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 requires closing?

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

但是,我强烈建议您使用 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() 调用可能引发的异常。

does the blob need any sort of closing?

您从中获取 BlobConnectionStatement 和/或 ResultSet 需要“管理” 。如果你做得正确,我认为 Blob 不需要进一步管理......尽管你可以选择 free() 它来提前释放资源。

<小时/>

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

  • 您正在“压制”异常;即捕获他们并扔掉所有证据。这使得事后调试非常困难。

  • 捕获异常几乎总是一个错误。您很可能会捕获各种您没有预料到会发生的异常;例如由代码中的错误引起的 NPE。

同时做这两件事......真的很糟糕。

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

关于java - Blob GetBinaryStream 需要关闭吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28288149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com