有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我使用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) 个答案

  1. # 1 楼答案

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

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

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

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

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