Eug*_*ene 8 java findbugs software-quality stream
我有这段代码,它是将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();
}
Run Code Online (Sandbox Code Playgroud)
然而,FindBugs一直在抱怨线:
s = new ObjectOutputStream(out);
Run Code Online (Sandbox Code Playgroud)
"可能无法关闭流" - BAD_PRACTICE - OS_OPEN_STREAM.有人可以帮忙吗?
我认为FindBugs并不认为IOUtils.closeQuietly(out)会关闭.
无论如何,关闭ObjectOutputStream就足够了,它将关闭底层的ByteArrayOutputStream.这是ObjectOutputStream.close实现
public void close() throws IOException {
flush();
clear();
bout.close();
}
Run Code Online (Sandbox Code Playgroud)
所以你可以简化你的代码
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream s = new ObjectOutputStream(out);
try {
s.writeObject(1);
} finally {
IOUtils.closeQuietly(s);
}
Run Code Online (Sandbox Code Playgroud)
或者如果您使用的是Java 7
ByteArrayOutputStream out = new ByteArrayOutputStream();
try (ObjectOutputStream s = new ObjectOutputStream(out)) {
s.writeObject(1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9688 次 |
| 最近记录: |