我有这段代码,它是将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/