diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java index a84a79eb77..6aacb4d7c8 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java @@ -271,12 +271,12 @@ public void get(int blockNumber, ByteBuffer buffer) throws IOException { protected int readFile(Path path, ByteBuffer buffer) throws IOException { int numBytesRead = 0; int numBytes; - FileChannel channel = FileChannel.open(path, StandardOpenOption.READ); - while ((numBytes = channel.read(buffer)) > 0) { - numBytesRead += numBytes; + try (FileChannel channel = FileChannel.open(path, StandardOpenOption.READ)) { + while ((numBytes = channel.read(buffer)) > 0) { + numBytesRead += numBytes; + } + buffer.limit(buffer.position()); } - buffer.limit(buffer.position()); - channel.close(); return numBytesRead; } @@ -460,11 +460,11 @@ private void deleteBlockFileAndEvictCache(Entry elementToPurge) { protected void writeFile(Path path, ByteBuffer buffer) throws IOException { buffer.rewind(); - WritableByteChannel writeChannel = Files.newByteChannel(path, CREATE_OPTIONS); - while (buffer.hasRemaining()) { - writeChannel.write(buffer); + try (WritableByteChannel writeChannel = Files.newByteChannel(path, CREATE_OPTIONS)) { + while (buffer.hasRemaining()) { + writeChannel.write(buffer); + } } - writeChannel.close(); } /**