From d63c0834da66cebaf52d318d7024a271d2bf3ec4 Mon Sep 17 00:00:00 2001 From: Amy Regnier Date: Mon, 8 Jun 2020 09:50:40 -0500 Subject: [PATCH] Initial commit of code to accompany article on copying data from InputStream to OutputStream --- .../InputStreamToOutputStreamUnitTest.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 core-java-modules/core-java-9/src/test/java/com/baeldung/java9/inputstream/outputstream/InputStreamToOutputStreamUnitTest.java diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/inputstream/outputstream/InputStreamToOutputStreamUnitTest.java b/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/inputstream/outputstream/InputStreamToOutputStreamUnitTest.java new file mode 100644 index 0000000000..e41dbca586 --- /dev/null +++ b/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/inputstream/outputstream/InputStreamToOutputStreamUnitTest.java @@ -0,0 +1,85 @@ +package com.baeldung.java9.inputstream.outputstream; + +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; +import static org.junit.Assert.assertEquals; + +import java.io.*; + +import org.apache.commons.io.IOUtils; +import org.junit.Test; + +import com.google.common.io.ByteStreams; + +public class InputStreamToOutputStreamUnitTest { + + // buffer size used for reading and writing + private static final int BUFFER_SIZE = 8192; + + /** + * Reads all bytes from an input stream and writes them to an output stream. + * @param source - input stream to copy data from + * @param target - output stream to copy data too + */ + private static void copy(InputStream source, OutputStream target) throws IOException { + byte[] buf = new byte[BUFFER_SIZE]; + int length; + while ((length = source.read(buf)) > 0) { + target.write(buf, 0, length); + } + } + + @Test + public final void givenUsingJavaEight_whenConvertingStringToInputStream_thenCorrect() throws IOException { + final String initialString = "Hello World!"; + + try (InputStream inputStream = new ByteArrayInputStream(initialString.getBytes()); + ByteArrayOutputStream targetStream = new ByteArrayOutputStream()) { + copy(inputStream, targetStream); + assertEquals(initialString, new String(targetStream.toByteArray())); + } + } + + @Test + public final void givenUsingJavaEight_whenConvertingVeryLongStringToInputStream_thenCorrect() throws IOException { + final String initialString = randomAlphabetic(20480); + + try (InputStream inputStream = new ByteArrayInputStream(initialString.getBytes()); + ByteArrayOutputStream targetStream = new ByteArrayOutputStream()) { + copy(inputStream, targetStream); + assertEquals(initialString, new String(targetStream.toByteArray())); + } + } + + @Test + public final void givenUsingJavaNine_whenConvertingStringToInputStream_thenCorrect() throws IOException { + final String initialString = "Hello World!"; + + try (InputStream inputStream = new ByteArrayInputStream(initialString.getBytes()); + ByteArrayOutputStream targetStream = new ByteArrayOutputStream()) { + inputStream.transferTo(targetStream); + assertEquals(initialString, new String(targetStream.toByteArray())); + } + } + + @Test + public final void givenUsingGuava_whenConvertingStringToInputStream_thenCorrect() throws IOException { + final String initialString = "Hello World!"; + + try (InputStream inputStream = new ByteArrayInputStream(initialString.getBytes()); + ByteArrayOutputStream targetStream = new ByteArrayOutputStream()) { + ByteStreams.copy(inputStream, targetStream); + assertEquals(initialString, new String(targetStream.toByteArray())); + } + } + + @Test + public final void givenUsingCommonsIO_whenConvertingStringToInputStream_thenCorrect() throws IOException { + final String initialString = "Hello World!"; + + try (InputStream inputStream = new ByteArrayInputStream(initialString.getBytes()); + ByteArrayOutputStream targetStream = new ByteArrayOutputStream()) { + IOUtils.copy(inputStream, targetStream); + assertEquals(initialString, new String(targetStream.toByteArray())); + } + } +}