Author: ggregory Date: Mon Apr 16 14:54:53 2012 New Revision: 1326636 URL: http://svn.apache.org/viewvc?rev=1326636&view=rev Log: [IO-325] Add IOUtils.toByteArray methods to work with URL and URI.
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=1326636&r1=1326635&r2=1326636&view=diff ============================================================================== --- commons/proper/io/trunk/src/changes/changes.xml (original) +++ commons/proper/io/trunk/src/changes/changes.xml Mon Apr 16 14:54:53 2012 @@ -47,6 +47,9 @@ The <action> type attribute can be add,u <body> <!-- The release date is the date RC is cut --> <release version="2.4" date="2012-TDB-TDB" description=""> + <action issue="IO-325" dev="ggregory" type="fix" due-to="raviprak"> + Add IOUtils.toByteArray methods to work with URL and URI. + </action> <action issue="IO-324" dev="ggregory" type="fix" due-to="raviprak"> Add missing Charset sister APIs to method that take a String charset name. </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=1326636&r1=1326635&r2=1326636&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 Mon Apr 16 14:54:53 2012 @@ -32,10 +32,12 @@ import java.io.PrintWriter; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.io.Writer; +import java.net.HttpURLConnection; import java.net.ServerSocket; import java.net.Socket; import java.net.URI; import java.net.URL; +import java.net.URLConnection; import java.nio.channels.Selector; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; @@ -151,6 +153,19 @@ public class IOUtils { } //----------------------------------------------------------------------- + + /** + * Closes a URLConnection. + * + * @param conn the connection to close. + * @since 2.4 + */ + public static void close(URLConnection conn) { + if (conn instanceof HttpURLConnection) { + ((HttpURLConnection) conn).disconnect(); + } + } + /** * Unconditionally close an <code>Reader</code>. * <p> @@ -586,6 +601,64 @@ public class IOUtils { return input.getBytes(); } + /** + * Get the contents of a <code>URI</code> as a <code>byte[]</code>. + * + * @param uri + * the <code>URI</code> to read + * @return the requested byte array + * @throws NullPointerException + * if the uri is null + * @throws IOException + * if an I/O exception occurs + * @since 2.4 + */ + public static byte[] toByteArray(URI uri) throws IOException { + return IOUtils.toByteArray(uri.toURL()); + } + + /** + * Get the contents of a <code>URL</code> as a <code>byte[]</code>. + * + * @param url + * the <code>URL</code> to read + * @return the requested byte array + * @throws NullPointerException + * if the input is null + * @throws IOException + * if an I/O exception occurs + * @since 2.4 + */ + public static byte[] toByteArray(URL url) throws IOException { + URLConnection conn = url.openConnection(); + try { + return IOUtils.toByteArray(conn); + } finally { + close(conn); + } + } + + /** + * Get the contents of a <code>URLConnection</code> as a <code>byte[]</code>. + * + * @param urlConn + * the <code>URLConnection</code> to read + * @return the requested byte array + * @throws NullPointerException + * if the urlConn is null + * @throws IOException + * if an I/O exception occurs + * @since 2.4 + */ + public static byte[] toByteArray(URLConnection urlConn) throws IOException { + InputStream inputStream = urlConn.getInputStream(); + try { + return IOUtils.toByteArray(inputStream); + } finally { + inputStream.close(); + } + } + // read char[] //----------------------------------------------------------------------- /** 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=1326636&r1=1326635&r2=1326636&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 Mon Apr 16 14:54:53 2012 @@ -37,6 +37,7 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.URI; import java.net.URL; +import java.net.URLConnection; import java.nio.channels.Selector; import java.util.Arrays; import java.util.List; @@ -440,6 +441,29 @@ public class IOUtilsTestCase extends Fil } } + public void testToByteArrayFromURI() throws Exception { + URI url = m_testFile.toURI(); + byte[] actual = IOUtils.toByteArray(url); + Assert.assertEquals(FILE_SIZE, actual.length); + } + + public void testToByteArrayFromURL() throws Exception { + URL url = m_testFile.toURI().toURL(); + byte[] actual = IOUtils.toByteArray(url); + Assert.assertEquals(FILE_SIZE, actual.length); + } + + public void testToByteArrayFromURLConnection() throws Exception { + URLConnection urlConn = m_testFile.toURI().toURL().openConnection(); + byte[] actual; + try { + actual = IOUtils.toByteArray(urlConn); + } finally { + IOUtils.close(urlConn); + } + Assert.assertEquals(FILE_SIZE, actual.length); + } + /** * Test for {@link IOUtils#toInputStream(CharSequence)} and {@link IOUtils#toInputStream(CharSequence, String)}. * Note, this test utilizes on {@link IOUtils#toByteArray(java.io.InputStream)} and so relies on