1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.surefire.api.util.internal;
20
21 import java.io.IOException;
22 import java.nio.ByteBuffer;
23 import java.nio.channels.ClosedChannelException;
24 import java.nio.channels.NonReadableChannelException;
25 import java.nio.channels.ReadableByteChannel;
26
27
28
29
30
31
32
33 abstract class AbstractNoninterruptibleReadableChannel implements ReadableByteChannel {
34 private volatile boolean open = true;
35
36 protected abstract int readImpl(ByteBuffer src) throws IOException;
37
38 protected abstract void closeImpl() throws IOException;
39
40 @Override
41 public final int read(ByteBuffer src) throws IOException {
42 if (!isOpen()) {
43 throw new ClosedChannelException();
44 }
45
46 if (!src.hasArray() || src.isReadOnly()) {
47 throw new NonReadableChannelException();
48 }
49
50 return src.hasRemaining() ? readImpl(src) : 0;
51 }
52
53 @Override
54 public final boolean isOpen() {
55 return open;
56 }
57
58 @Override
59 public final void close() throws IOException {
60 try {
61 closeImpl();
62 } finally {
63 open = false;
64 }
65 }
66 }