gpt4 book ai didi

java - FindBugs - 使用 ObjectOutputStream 时为 "may fail to close stream"

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:17 26 4
gpt4 key购买 nike

我有这么一段代码,就是写一个Ojbect到字节数组流:

     static byte[] toBytes(MyTokens tokens) throws IOException {
ByteArrayOutputStream out = null;
ObjectOutput s = null;
try {
out = new ByteArrayOutputStream();
try {
s = new ObjectOutputStream(out);
s.writeObject(tokens);
} finally {
try {
s.close();
} catch (Exception e) {
throw new CSBRuntimeException(e);
}
}
} catch (Exception e) {
throw new CSBRuntimeException(e);
} finally {
IOUtils.closeQuietly(out);
}
return out.toByteArray();
}

但是,FindBugs 不断提示线路:

s = new ObjectOutputStream(out);

“可能无法关闭流”- BAD_PRACTICE - OS_OPEN_STREAM。有人可以帮忙吗?

最佳答案

我认为 FindBugs 不理解 IOUtils.closeQuietly(out) 关闭。

无论如何,关闭 ObjectOutputStream 就足够了,它将关闭底层的 ByteArrayOutputStream。这是 ObjectOutputStream.close 实现

public void close() throws IOException {
flush();
clear();
bout.close();
}

这样你就可以简化你的代码

    ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream s = new ObjectOutputStream(out);
try {
s.writeObject(1);
} finally {
IOUtils.closeQuietly(s);
}

或者如果你使用的是 Java 7

    ByteArrayOutputStream out = new ByteArrayOutputStream();
try (ObjectOutputStream s = new ObjectOutputStream(out)) {
s.writeObject(1);
}

关于java - FindBugs - 使用 ObjectOutputStream 时为 "may fail to close stream",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14434323/

26 4 0