You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2013/04/21 01:23:36 UTC

svn commit: r1470251 - in /commons/proper/io/trunk/src: changes/changes.xml main/java/org/apache/commons/io/IOUtils.java test/java/org/apache/commons/io/IOUtilsTestCase.java

Author: sebb
Date: Sat Apr 20 23:23:36 2013
New Revision: 1470251

URL: http://svn.apache.org/r1470251
Log:
IO-330 IOUtils#toBufferedOutputStream/toBufferedWriter to conditionally wrap the output
Added asBufferedInputStream, asBufferedOutputStream, asBufferedReader, asBufferedWriter 

Modified:
    commons/proper/io/trunk/src/changes/changes.xml
    commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java
    commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java

Modified: commons/proper/io/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1470251&r1=1470250&r2=1470251&view=diff
==============================================================================
--- commons/proper/io/trunk/src/changes/changes.xml (original)
+++ commons/proper/io/trunk/src/changes/changes.xml Sat Apr 20 23:23:36 2013
@@ -47,6 +47,10 @@ The <action> type attribute can be add,u
   <body>
     <!-- The release date is the date RC is cut -->
     <release version="2.5" date="2013-??-??" description="New features and bug fixes.">    
+      <action issue="IO-330" dev="sebb" type="add">
+         IOUtils#toBufferedOutputStream/toBufferedWriter to conditionally wrap the output
+         Added asBufferedInputStream, asBufferedOutputStream, asBufferedReader, asBufferedWriter 
+      </action>
       <action issue="IO-346" dev="sebb" type="add">
          Add ByteArrayOutputStream.toInputStream()
       </action>

Modified: commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java?rev=1470251&r1=1470250&r2=1470251&view=diff
==============================================================================
--- commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java (original)
+++ commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java Sat Apr 20 23:23:36 2013
@@ -17,7 +17,9 @@
 package org.apache.commons.io;
 
 import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.ByteArrayInputStream;
 import java.io.CharArrayWriter;
 import java.io.Closeable;
@@ -434,18 +436,84 @@ public class IOUtils {
     }
 
     /**
-     * Returns the given reader if it is a {@link BufferedReader}, otherwise creates a toBufferedReader for the given
+     * Returns the given reader if it is a {@link BufferedReader}, otherwise creates a BufferedReader from the given
      * reader.
      * 
      * @param reader
-     *            the reader to wrap or return
+     *            the reader to wrap or return (not null)
      * @return the given reader or a new {@link BufferedReader} for the given reader
      * @since 2.2
+     * @see #asBufferedReader(Reader)
+     * @throws NullPointerException if the input parameter is null
      */
     public static BufferedReader toBufferedReader(final Reader reader) {
         return reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
     }
     
+    /**
+     * Returns the given reader if it is already a {@link BufferedReader}, otherwise creates a BufferedReader from the given
+     * reader.
+     * 
+     * @param reader
+     *            the reader to wrap or return (not null)
+     * @return the given reader or a new {@link BufferedReader} for the given reader
+     * @since 2.5
+     * @throws NullPointerException if the input parameter is null
+     */
+    public static BufferedReader asBufferedReader(final Reader reader) {
+        return reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
+    }
+    
+    /**
+     * Returns the given Writer if it is already a {@link BufferedWriter}, otherwise creates a BufferedWriter from the given
+     * Writer.
+     * 
+     * @param writer
+     *            the Writer to wrap or return (not null)
+     * @return the given Writer or a new {@link BufferedWriter} for the given Writer
+     * @since 2.5
+     * @throws NullPointerException if the input parameter is null
+     */
+    public static BufferedWriter asBufferedWriter(final Writer writer) {
+        return writer instanceof BufferedWriter ? (BufferedWriter) writer : new BufferedWriter(writer);
+    }
+    
+    /**
+     * Returns the given OutputStream if it is already a {@link BufferedOutputStream}, otherwise creates a BufferedOutputStream from the given
+     * OutputStream.
+     * 
+     * @param outputStream
+     *            the OutputStream to wrap or return (not null)
+     * @return the given OutputStream or a new {@link BufferedOutputStream} for the given OutputStream
+     * @since 2.5
+     * @throws NullPointerException if the input parameter is null
+     */
+    public static BufferedOutputStream asBufferedOutputStream(final OutputStream outputStream) {
+        // reject null early on rather than waiting for IO operation to fail
+        if (outputStream == null) { // not checked by BufferedOutputStream
+            throw new NullPointerException();
+        }
+        return outputStream instanceof BufferedOutputStream ? (BufferedOutputStream) outputStream : new BufferedOutputStream(outputStream);
+    }
+    
+    /**
+     * Returns the given InputStream if it is already a {@link BufferedInputStream}, otherwise creates a BufferedInputStream from the given
+     * InputStream.
+     * 
+     * @param inputStream
+     *            the InputStream to wrap or return (not null)
+     * @return the given InputStream or a new {@link BufferedInputStream} for the given InputStream
+     * @since 2.5
+     * @throws NullPointerException if the input parameter is null
+     */
+    public static BufferedInputStream asBufferedInputStream(final InputStream inputStream) {
+        // reject null early on rather than waiting for IO operation to fail
+        if (inputStream == null) { // not checked by BufferedInputStream
+            throw new NullPointerException();
+        }
+        return inputStream instanceof BufferedInputStream ? (BufferedInputStream) inputStream : new BufferedInputStream(inputStream);
+    }
+    
     // read toByteArray
     //-----------------------------------------------------------------------
     /**

Modified: commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java?rev=1470251&r1=1470250&r2=1470251&view=diff
==============================================================================
--- commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java (original)
+++ commons/proper/io/trunk/src/test/java/org/apache/commons/io/IOUtilsTestCase.java Sat Apr 20 23:23:36 2013
@@ -17,7 +17,9 @@
 package org.apache.commons.io;
 
 import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.CharArrayReader;
@@ -32,8 +34,10 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
 import java.io.Reader;
 import java.io.StringReader;
+import java.io.Writer;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.URI;
@@ -1205,4 +1209,86 @@ public class IOUtilsTestCase extends Fil
     public void testToString_URL_CharsetNameNull() throws Exception {
         testToString_URL(null);
     }
+    
+    public void testAsBufferedNull() {
+        try {
+            IOUtils.asBufferedInputStream(null);
+            fail("Expected NullPointerException");
+        } catch (NullPointerException npe) {
+            // expected
+        }
+        try {
+            IOUtils.asBufferedOutputStream(null);
+            fail("Expected NullPointerException");
+        } catch (NullPointerException npe) {
+            // expected
+        }
+        try {
+            IOUtils.asBufferedReader(null);
+            fail("Expected NullPointerException");
+        } catch (NullPointerException npe) {
+            // expected
+        }
+        try {
+            IOUtils.asBufferedWriter(null);
+            fail("Expected NullPointerException");
+        } catch (NullPointerException npe) {
+            // expected
+        }
+    }
+
+    public void testAsBufferedInputStream() {
+        InputStream is = new InputStream() {
+            @Override
+            public int read() throws IOException {
+                return 0;
+            }
+        };
+        final BufferedInputStream bis = IOUtils.asBufferedInputStream(is);
+        assertNotSame(is, bis);
+        assertSame(bis, IOUtils.asBufferedInputStream(bis));
+    }
+
+    public void testAsBufferedOutputStream() {
+        OutputStream is = new OutputStream() {
+            @Override
+            public void write(int b) throws IOException { }
+        };
+        final BufferedOutputStream bis = IOUtils.asBufferedOutputStream(is);
+        assertNotSame(is, bis);
+        assertSame(bis, IOUtils.asBufferedOutputStream(bis));
+    }
+
+    public void testAsBufferedReader() {
+        Reader is = new Reader() {
+            @Override
+            public int read(char[] cbuf, int off, int len) throws IOException {
+                return 0;
+            }
+            @Override
+            public void close() throws IOException { }
+        };
+        final BufferedReader bis = IOUtils.asBufferedReader(is);
+        assertNotSame(is, bis);
+        assertSame(bis, IOUtils.asBufferedReader(bis));
+    }
+
+    public void testAsBufferedWriter() {
+        Writer is = new Writer() {
+            @Override
+            public void write(int b) throws IOException { }
+
+            @Override
+            public void write(char[] cbuf, int off, int len) throws IOException { }
+
+            @Override
+            public void flush() throws IOException { }
+
+            @Override
+            public void close() throws IOException { }
+        };
+        final BufferedWriter bis = IOUtils.asBufferedWriter(is);
+        assertNotSame(is, bis);
+        assertSame(bis, IOUtils.asBufferedWriter(bis));
+    }
 }