diff --git a/core/src/main/java/org/apache/spark/io/NioBufferedFileInputStream.java b/core/src/main/java/org/apache/spark/io/NioBufferedFileInputStream.java index a1e29a8c873da..7ca5ade7b9a74 100644 --- a/core/src/main/java/org/apache/spark/io/NioBufferedFileInputStream.java +++ b/core/src/main/java/org/apache/spark/io/NioBufferedFileInputStream.java @@ -59,10 +59,10 @@ private boolean refill() throws IOException { while (nRead == 0) { nRead = fileChannel.read(byteBuffer); } + byteBuffer.flip(); if (nRead < 0) { return false; } - byteBuffer.flip(); } return true; } diff --git a/core/src/test/java/org/apache/spark/io/GenericFileInputStreamSuite.java b/core/src/test/java/org/apache/spark/io/GenericFileInputStreamSuite.java index 22db3592ecc96..8ff787975eaae 100644 --- a/core/src/test/java/org/apache/spark/io/GenericFileInputStreamSuite.java +++ b/core/src/test/java/org/apache/spark/io/GenericFileInputStreamSuite.java @@ -48,8 +48,12 @@ public void setUp() throws IOException { } @After - public void tearDown() { + public void tearDown() throws IOException { inputFile.delete(); + + for (InputStream is : inputStreams) { + is.close(); + } } @Test @@ -141,4 +145,15 @@ public void testBytesSkippedAfterEOF() throws IOException { assertEquals(-1, inputStream.read()); } } + + @Test + public void testReadPastEOF() throws IOException { + InputStream is = inputStreams[0]; + byte[] buf = new byte[1024]; + int read; + while ((read = is.read(buf, 0, buf.length)) != -1); + + int readAfterEOF = is.read(buf, 0, buf.length); + assertEquals(-1, readAfterEOF); + } }