I have this piece of code, which is to write an Ojbect to a byte array stream:
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();
}
However, FindBugs keeps complaining about line:
s = new ObjectOutputStream(out);
that "may fail to close stream" - BAD_PRACTICE - OS_OPEN_STREAM. Can somebody help?
I think FindBugs does not undestand that IOUtils.closeQuietly(out) closes out.
Anyway it is enough to close ObjectOutputStream and it will close underlying ByteArrayOutputStream. This is ObjectOutputStream.close implementation
so you can simplify your code
or if you are in Java 7
It means that
s.close()
will try to close underlying stream, but it may fail to do it. So to be sure you should close it on your own also. Try to addout.close()
and see if warning disappears.