我使用ByteArrayOutputStream
来填充具有不同长度(以字节为单位)的不同值的字节数组。我使用方法write(byte[] b)
。由于此方法继承自OutputStream
,因此可能会抛出IOException。在ByteArrayOutputStream
中有一个方法write(byte[] b, int off, int len)
不会抛出IOException,因此我扩展ByteArrayOutputStream
并覆盖write(byte[] b)
方法,该方法现在也不会抛出IOException:
private class ByteArrayOutputStreamNoException extends ByteArrayOutputStream
{
public ByteArrayOutputStreamNoException(int size)
{
super(size);
}
public ByteArrayOutputStreamNoException()
{
super();
}
@Override
public void write(byte[] data)
{
write(data, 0, data.length);
}
}
使用扩展类我现在在eclipse 4.5.1中得到资源泄漏的警告,因为我没有关闭代码中的流。 ByteArrayOutputStream
不是这种情况。我的扩展类有什么问题,或者我必须添加什么才能删除警告?我知道我可以为流的每个实例添加SuppressWarnings
注释,但我更喜欢以某种方式更改扩展类以删除警告。
答案 0 :(得分:3)
Eclipse在标准Java库中有一个类列表,已知这些类不需要资源泄漏警告,ByteArrayOutputStream
就是其中之一。 Eclipse bug 358903中有一个很长的描述。
实现此功能的代码是applyCloseableClassWhitelists
的{{1}}方法。类列表是硬编码的,不能扩展。
当您扩展org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding
类时,Eclipse无法再确定不需要ByteArrayOutputStream
,因此您会收到警告。
你可以使用'try-with-resources'样式的try语句解决这个问题:
close