当前位置: 首页 > 知识库问答 >
问题:

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

凌照
2023-03-14

我使用一个ByteArrayOutputStream用不同长度的不同值填充字节数组。我使用方法write(字节[]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个答案

汲涵育
2023-03-14

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

实现这一点的代码是org的applyCloseableClassWhitelists方法。日食jdt。内部的编译器。查找。引用绑定。类列表是硬编码的,不能扩展。

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

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

try
 (ByteArrayOutputStreamNoException stream = new ByteArrayOutputStreamNoException())
 {
   // TODO work with the stream
 } 
 类似资料: