EN JP CN

UF.NIO

UF.NIO

UF (Use Freed) 問題は、リソースが解放された後にリソースを使用する試みがある場合に報告されます。警告 UF.NIO は、java.nio.* オブジェクトが閉じられた後にこのオブジェクトの使用を試みていることを示します。

例 1

15      public boolean checkMeta(ReadableByteChannel channel) {
16         final ByteBuffer b = ByteBuffer.allocate(8);
17         try {
18             final int i = channel.read(b);
19             if (i < 8) {
20                 return false;
21             }
22         } catch (IOException e) {
23             return false;
24         } finally {
25             try {
26                 channel.close();
27             } catch (IOException e) {
28                 // do nothing
29             }
30         }
31 
32         // Cast unsigned character constants prior to comparison
33         return (b.get(0) == (byte) 'm' && b.get(1) == (byte) 'y' &&
34                 b.get(2) == (byte) 'f' && b.get(3) == (byte) 'o' &&
35                 b.get(4) == (byte) 'r' && b.get(5) == (byte) 'm' &&
36                 b.get(6) == (byte) 'a' && b.get(7) == (byte) 't');
37     }
38 
39     public void printOut(final String path) throws IOException {
40         final ReadableByteChannel ch = new FileInputStream(path).getChannel();
41         if (checkMeta(ch)) {
42             try {
43                 final ByteBuffer b = ByteBuffer.allocate(1024);
44                 int i;
45                 while ((i = ch.read(b)) > 0) {
46                     print(b);
47                 }
48             } catch (IOException e) {
49                 e.printStackTrace();
50             }
51         }
52     }
53 
54     public void print(final ByteBuffer b) {
55         while (b.hasRemaining()) {
56             System.out.print(b);
57         }
58         b.clear();
59     }

UF.NIO が 45 行目のスニペットについて報告されています。26 行目で閉じられたチャンネルから読み取る試みがあります。