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

时间:2015-12-09 09:19:31

标签: java eclipse memory-leaks

我使用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注释,但我更喜欢以某种方式更改扩展类以删除警告。

1 个答案:

答案 0 :(得分:3)

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

实现此功能的代码是applyCloseableClassWhitelists的{​​{1}}方法。类列表是硬编码的,不能扩展。

当您扩展org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding类时,Eclipse无法再确定不需要ByteArrayOutputStream,因此您会收到警告。

你可以使用'try-with-resources'样式的try语句解决这个问题:

close