diff --git a/src/main/java/org/codehaus/plexus/util/io/CachingOutputStream.java b/src/main/java/org/codehaus/plexus/util/io/CachingOutputStream.java index 744e6f06..4bea628a 100644 --- a/src/main/java/org/codehaus/plexus/util/io/CachingOutputStream.java +++ b/src/main/java/org/codehaus/plexus/util/io/CachingOutputStream.java @@ -123,6 +123,7 @@ private void flushBuffer( ByteBuffer writeBuffer ) throws IOException { readBuffer = this.readBuffer; ( ( Buffer ) readBuffer ).clear(); + readBuffer.limit( len ); } else { diff --git a/src/test/java/org/codehaus/plexus/util/io/CachingWriterTest.java b/src/test/java/org/codehaus/plexus/util/io/CachingWriterTest.java index b8a8f4b1..17026092 100644 --- a/src/test/java/org/codehaus/plexus/util/io/CachingWriterTest.java +++ b/src/test/java/org/codehaus/plexus/util/io/CachingWriterTest.java @@ -17,6 +17,7 @@ */ import java.io.IOException; +import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -63,6 +64,32 @@ private void waitLastModified() throws IOException, InterruptedException } } + @Test + public void testNoOverwriteWithFlush() throws IOException, InterruptedException + { + String data = "Hello world!"; + Path path = tempDir.resolve("file-bigger.txt"); + assertFalse( Files.exists(path)); + + try (Writer w = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { + for (int i = 0; i < 10; i++) { + w.write(data); + } + } + FileTime modified = Files.getLastModifiedTime(path); + + waitLastModified(); + + try (Writer w = new CachingWriter(path, StandardCharsets.UTF_8)) { + for (int i = 0; i < 10; i++) { + w.write(data); + w.flush(); + } + } + FileTime newModified = Files.getLastModifiedTime(path); + assertEquals(modified, newModified); + } + @Test public void testWriteNoExistingFile() throws IOException, InterruptedException {