Skip to content

Commit dbf443b

Browse files
author
Gary Gregory
committed
[IO-510] Add and adapt ReadAheadInputStream and
BufferedFileChannelInputStream from Apache Spark. Compiles on Java 8 and 11.
1 parent d3a5177 commit dbf443b

1 file changed

Lines changed: 11 additions & 6 deletions

File tree

src/main/java/org/apache/commons/io/input/BufferedFileChannelInputStream.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
import org.apache.commons.io.IOUtils;
2828

29-
import sun.misc.Cleaner;
3029
import sun.nio.ch.DirectBuffer;
3130

3231
/**
@@ -129,13 +128,19 @@ private void bufferCleaner(final DirectBuffer buffer) {
129128
//
130129
final String specVer = System.getProperty("java.specification.version");
131130
if ("1.8".equals(specVer)) {
132-
// On Java 8.
133-
final Cleaner cleaner = buffer.cleaner();
134-
if (cleaner != null) {
135-
cleaner.clean();
131+
// On Java 8, but also compiles on Java 11.
132+
try {
133+
final Class<?> cls = Class.forName("sun.misc.Cleaner");
134+
final Object cleaner = buffer.cleaner();
135+
if (cleaner != null) {
136+
final Method cleanMethod = cls.getMethod("clean");
137+
cleanMethod.invoke(cleaner);
138+
}
139+
} catch (ReflectiveOperationException e) {
140+
throw new IllegalStateException(e);
136141
}
137142
} else {
138-
// On Java 9 and up, but compiled on Java 8.
143+
// On Java 9 and up, but compiles on Java 8.
139144
try {
140145
final Class<?> cls = Class.forName("sun.misc.Unsafe");
141146
final Method cleanerMethod = cls.getMethod("invokeCleaner", ByteBuffer.class);

0 commit comments

Comments
 (0)