gpt4 book ai didi

java - 扩展 ByteArrayOutputStream 时 eclipse 中的资源泄漏警告

转载 作者:行者123 更新时间:2023-11-30 08:06:43 25 4
gpt4 key购买 nike

我使用 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 注释添加到流的每个实例化,但我更喜欢以某种方式更改扩展类以删除警告。

最佳答案

Eclipse 在标准 Java 库中有一个类列表,已知这些类不需要资源泄漏警告,ByteArrayOutputStream 就是其中之一。在 Eclipse bug 358903 中对此有很长的描述.

实现这个的代码是 org.eclipse.jdt.internal.compiler.lookup.ReferenceBindingapplyCloseableClassWhitelists 方法。类列表是硬编码的,无法扩展。

当您扩展 ByteArrayOutputStream 类时,Eclipse 无法再确定不需要 close,因此您会收到警告。

您可以使用“try-with-resources”风格的 try 语句来解决这个问题:

try
(ByteArrayOutputStreamNoException stream = new ByteArrayOutputStreamNoException())
{
// TODO work with the stream
}

关于java - 扩展 ByteArrayOutputStream 时 eclipse 中的资源泄漏警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34174907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com