scolebourne 2004/07/31 03:40:47 Modified: io/src/test/org/apache/commons/io CopyUtilsTest.java io/src/java/org/apache/commons/io CopyUtils.java Log: Add char[] methods to CopyUtils Revision Changes Path 1.7 +184 -2 jakarta-commons/io/src/test/org/apache/commons/io/CopyUtilsTest.java Index: CopyUtilsTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/io/src/test/org/apache/commons/io/CopyUtilsTest.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- CopyUtilsTest.java 23 Feb 2004 05:02:25 -0000 1.6 +++ CopyUtilsTest.java 31 Jul 2004 10:40:47 -0000 1.7 @@ -80,6 +80,7 @@ // Tests // ---------------------------------------------------------------- + //----------------------------------------------------------------------- public void testCopy_byteArrayToOutputStream() throws Exception { ByteArrayOutputStream baout = new ByteArrayOutputStream(); OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); @@ -102,6 +103,32 @@ assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); } + public void testCopy_byteArrayToWriter_nullEncoding() throws Exception { + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + Writer writer = new java.io.OutputStreamWriter(baout, "US-ASCII"); + + CopyUtils.copy(inData, writer, null); + writer.flush(); + + assertEquals("Sizes differ", inData.length, baout.size()); + assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); + } + + public void testCopy_byteArrayToWriter_Encoding() throws Exception { + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + Writer writer = new java.io.OutputStreamWriter(baout, "US-ASCII"); + + CopyUtils.copy(inData, writer, "UTF8"); + writer.flush(); + + byte[] bytes = baout.toByteArray(); + bytes = new String(bytes, "UTF8").getBytes("US-ASCII"); + assertTrue("Content differs", Arrays.equals(inData, bytes)); + } + + //----------------------------------------------------------------------- public void testCopy_inputStreamToOutputStream() throws Exception { InputStream in = new ByteArrayInputStream(inData); in = new YellOnCloseInputStream(in); @@ -132,6 +159,40 @@ assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); } + public void testCopy_inputStreamToWriter_nullEncoding() throws Exception { + InputStream in = new ByteArrayInputStream(inData); + in = new YellOnCloseInputStream(in); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + Writer writer = new java.io.OutputStreamWriter(baout, "US-ASCII"); + + CopyUtils.copy(in, writer, null); + writer.flush(); + + assertTrue("Not all bytes were read", in.available() == 0); + assertEquals("Sizes differ", inData.length, baout.size()); + assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); + } + + public void testCopy_inputStreamToWriter_Encoding() throws Exception { + InputStream in = new ByteArrayInputStream(inData); + in = new YellOnCloseInputStream(in); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + Writer writer = new java.io.OutputStreamWriter(baout, "US-ASCII"); + + CopyUtils.copy(in, writer, "UTF8"); + writer.flush(); + + assertTrue("Not all bytes were read", in.available() == 0); + byte[] bytes = baout.toByteArray(); + bytes = new String(bytes, "UTF8").getBytes("US-ASCII"); + assertTrue("Content differs", Arrays.equals(inData, bytes)); + } + + //----------------------------------------------------------------------- public void testCopy_readerToOutputStream() throws Exception { InputStream in = new ByteArrayInputStream(inData); in = new YellOnCloseInputStream(in); @@ -152,6 +213,39 @@ assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); } + public void testCopy_readerToOutputStream_nullEncoding() throws Exception { + InputStream in = new ByteArrayInputStream(inData); + in = new YellOnCloseInputStream(in); + Reader reader = new java.io.InputStreamReader(in, "US-ASCII"); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + + CopyUtils.copy(reader, out, null); + // note: this method *does* flush. + // note: we don't flush here; this IOUtils method does it for us + + assertEquals("Sizes differ", inData.length, baout.size()); + assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); + } + + public void testCopy_readerToOutputStream_Encoding() throws Exception { + InputStream in = new ByteArrayInputStream(inData); + in = new YellOnCloseInputStream(in); + Reader reader = new java.io.InputStreamReader(in, "US-ASCII"); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + + CopyUtils.copy(reader, out, "UTF16"); + // note: this method *does* flush. + // note: we don't flush here; this IOUtils method does it for us + + byte[] bytes = baout.toByteArray(); + bytes = new String(bytes, "UTF16").getBytes("US-ASCII"); + assertTrue("Content differs", Arrays.equals(inData, bytes)); + } + public void testCopy_readerToWriter() throws Exception { InputStream in = new ByteArrayInputStream(inData); in = new YellOnCloseInputStream(in); @@ -171,6 +265,7 @@ assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); } + //----------------------------------------------------------------------- public void testCopy_stringToOutputStream() throws Exception { String str = new String(inData, "US-ASCII"); @@ -189,6 +284,35 @@ assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); } + public void testCopy_stringToOutputStream_nullEncoding() throws Exception { + String str = new String(inData, "US-ASCII"); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + + CopyUtils.copy(str, out, null); + // note: this method *does* flush. + // note: we don't flush here; this IOUtils method does it for us + + assertEquals("Sizes differ", inData.length, baout.size()); + assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); + } + + public void testCopy_stringToOutputStream_Encoding() throws Exception { + String str = new String(inData, "US-ASCII"); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + + CopyUtils.copy(str, out, "UTF16"); + // note: this method *does* flush. + // note: we don't flush here; this IOUtils method does it for us + + byte[] bytes = baout.toByteArray(); + bytes = new String(bytes, "UTF16").getBytes("US-ASCII"); + assertTrue("Content differs", Arrays.equals(inData, bytes)); + } + public void testCopy_stringToWriter() throws Exception { String str = new String(inData, "US-ASCII"); @@ -203,4 +327,62 @@ assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); } -} // CopyUtilsTest + //----------------------------------------------------------------------- + public void testCopy_charArrayToOutputStream() throws Exception { + String str = new String(inData, "US-ASCII"); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + + CopyUtils.copy(str.toCharArray(), out); + // note: this method *does* flush. + // note: we don't flush here; this IOUtils method does it for us + + assertEquals("Sizes differ", inData.length, baout.size()); + assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); + } + + public void testCopy_charArrayToOutputStream_nullEncoding() throws Exception { + String str = new String(inData, "US-ASCII"); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + + CopyUtils.copy(str.toCharArray(), out, null); + // note: this method *does* flush. + // note: we don't flush here; this IOUtils method does it for us + + assertEquals("Sizes differ", inData.length, baout.size()); + assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); + } + + public void testCopy_charArrayToOutputStream_Encoding() throws Exception { + String str = new String(inData, "US-ASCII"); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + + CopyUtils.copy(str.toCharArray(), out, "UTF16"); + // note: this method *does* flush. + // note: we don't flush here; this IOUtils method does it for us + + byte[] bytes = baout.toByteArray(); + bytes = new String(bytes, "UTF16").getBytes("US-ASCII"); + assertTrue("Content differs", Arrays.equals(inData, bytes)); + } + + public void testCopy_charArrayToWriter() throws Exception { + String str = new String(inData, "US-ASCII"); + + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + OutputStream out = new YellOnFlushAndCloseOutputStream(baout, false, true); + Writer writer = new java.io.OutputStreamWriter(baout, "US-ASCII"); + + CopyUtils.copy(str.toCharArray(), writer); + writer.flush(); + + assertEquals("Sizes differ", inData.length, baout.size()); + assertTrue("Content differs", Arrays.equals(inData, baout.toByteArray())); + } + +} 1.8 +76 -4 jakarta-commons/io/src/java/org/apache/commons/io/CopyUtils.java Index: CopyUtils.java =================================================================== RCS file: /home/cvs/jakarta-commons/io/src/java/org/apache/commons/io/CopyUtils.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- CopyUtils.java 31 Jul 2004 09:52:09 -0000 1.7 +++ CopyUtils.java 31 Jul 2004 10:40:47 -0000 1.8 @@ -16,6 +16,7 @@ package org.apache.commons.io; import java.io.ByteArrayInputStream; +import java.io.CharArrayReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -86,6 +87,9 @@ * * 7 copy byte[] Writer 3 * 8 copy byte[] OutputStream (trivial) + * + * 9 copy char[] OutputStream 4 + * 10 copy char[] Writer (trivial) * </pre> * * <p>Note that only the first two methods shuffle bytes; the rest use these @@ -118,7 +122,7 @@ /** * Copy bytes from a <code>byte[]</code> to an <code>OutputStream</code>. * - * @param input the byte array to read from + * @param input the byte array to read from, do not modify during output * @param output the <code>OutputStream</code> to write to * @throws NullPointerException if the input or output is null * @throws IOException if an I/O error occurs @@ -130,8 +134,10 @@ /** * Copy bytes from a <code>byte[]</code> to chars on a <code>Writer</code> * using the default character encoding of the platform. + * <p> + * This method uses [EMAIL PROTECTED] ByteArrayInputStream} and [EMAIL PROTECTED] InputStreamReader}. * - * @param input the byte array to read from + * @param input the byte array to read from, do not modify during output * @param output the <code>Writer</code> to write to * @throws NullPointerException if the input or output is null * @throws IOException if an I/O error occurs @@ -147,8 +153,10 @@ * <p> * Character encoding names can be found at * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. + * <p> + * This method uses [EMAIL PROTECTED] ByteArrayInputStream} and [EMAIL PROTECTED] InputStreamReader}. * - * @param input the byte array to read from + * @param input the byte array to read from, do not modify during output * @param output the <code>Writer</code> to write to * @param encoding the encoding to use, null means platform default * @throws NullPointerException if the input or output is null @@ -184,6 +192,8 @@ /** * Copy bytes from an <code>InputStream</code> to chars on a <code>Writer</code> * using the default character encoding of the platform. + * <p> + * This method uses [EMAIL PROTECTED] InputStreamReader}. * * @param input the <code>InputStream</code> to read from * @param output the <code>Writer</code> to write to @@ -201,6 +211,8 @@ * <p> * Character encoding names can be found at * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. + * <p> + * This method uses [EMAIL PROTECTED] InputStreamReader}. * * @param input the <code>InputStream</code> to read from * @param output the <code>Writer</code> to write to @@ -217,6 +229,58 @@ } } + // from char[] + //----------------------------------------------------------------------- + /** + * Copy chars from a <code>char[]</code> to a <code>Writer</code> + * using the default character encoding of the platform. + * <p> + * This method uses [EMAIL PROTECTED] CharArrayReader}. + * + * @param input the char array to read from, do not modify during output + * @param output the <code>Writer</code> to write to + * @throws NullPointerException if the input or output is null + * @throws IOException if an I/O error occurs + */ + public static void copy(char[] input, Writer output) throws IOException { + output.write(input); + } + + /** + * Copy chars from a <code>char[]</code> to bytes on an <code>OutputStream</code>. + * <p> + * This method uses [EMAIL PROTECTED] CharArrayReader} and [EMAIL PROTECTED] OutputStreamWriter}. + * + * @param input the char array to read from, do not modify during output + * @param output the <code>OutputStream</code> to write to + * @throws NullPointerException if the input or output is null + * @throws IOException if an I/O error occurs + */ + public static void copy(char[] input, OutputStream output) throws IOException { + CharArrayReader in = new CharArrayReader(input); + copy(in, output); + } + + /** + * Copy chars from a <code>char[]</code> to bytes on an <code>OutputStream</code> + * using the specified character encoding. + * <p> + * Character encoding names can be found at + * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. + * <p> + * This method uses [EMAIL PROTECTED] CharArrayReader} and [EMAIL PROTECTED] OutputStreamWriter}. + * + * @param input the char array to read from, do not modify during output + * @param output the <code>OutputStream</code> to write to + * @param encoding the encoding to use, null means platform default + * @throws NullPointerException if the input or output is null + * @throws IOException if an I/O error occurs + */ + public static void copy(char[] input, OutputStream output, String encoding) throws IOException { + CharArrayReader in = new CharArrayReader(input); + copy(in, output, encoding); + } + // from Reader //----------------------------------------------------------------------- /** @@ -244,6 +308,8 @@ * using the default character encoding of the platform, and calling flush. * <p> * Due to the implementation of OutputStreamWriter, this method performs a flush. + * <p> + * This method uses [EMAIL PROTECTED] OutputStreamWriter}. * * @param input the <code>Reader</code> to read from * @param output the <code>OutputStream</code> to write to @@ -265,6 +331,8 @@ * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. * <p> * Due to the implementation of OutputStreamWriter, this method performs a flush. + * <p> + * This method uses [EMAIL PROTECTED] OutputStreamWriter}. * * @param input the <code>Reader</code> to read from * @param output the <code>OutputStream</code> to write to @@ -302,6 +370,8 @@ * using the default character encoding of the platform, and calling flush. * <p> * Due to the implementation of OutputStreamWriter, this method performs a flush. + * <p> + * This method uses [EMAIL PROTECTED] StringReader} and [EMAIL PROTECTED] OutputStreamWriter}. * * @param input the <code>String</code> to read from * @param output the <code>OutputStream</code> to write to @@ -324,6 +394,8 @@ * <a href="http://www.iana.org/assignments/character-sets">IANA</a>. * <p> * Due to the implementation of OutputStreamWriter, this method performs a flush. + * <p> + * This method uses [EMAIL PROTECTED] StringReader} and [EMAIL PROTECTED] OutputStreamWriter}. * * @param input the <code>String</code> to read from * @param output the <code>OutputStream</code> to write to
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]