You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2006/12/03 19:30:08 UTC
svn commit: r481854 - in /jakarta/commons/proper/io/trunk: RELEASE-NOTES.txt
src/java/org/apache/commons/io/IOUtils.java
src/test/org/apache/commons/io/IOUtilsCopyTestCase.java
Author: scolebourne
Date: Sun Dec 3 10:30:07 2006
New Revision: 481854
URL: http://svn.apache.org/viewvc?view=rev&rev=481854
Log:
IO-84 - Make IOUtils.copy return -1 not an exception for large files, as more backwards compatible
Modified:
jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt
jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOUtils.java
jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/IOUtilsCopyTestCase.java
Modified: jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt?view=diff&rev=481854&r1=481853&r2=481854
==============================================================================
--- jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt (original)
+++ jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt Sun Dec 3 10:30:07 2006
@@ -60,15 +60,14 @@
- This now handles the situation where an error occurs when deleting the file
- IOUtils.copy [IO-84]
- - The copy(InputStream, OutputStream) method now throws an exception if
- the count is greater than an int
- - The copy(Reader, Writer) method now throws an exception if
- the count is greater than an int
+ - Copy methods could return inaccurate byte/char count for large streams
+ - The copy(InputStream, OutputStream) method now returns -1 if the count is greater than an int
+ - The copy(Reader, Writer) method now throws now returns -1 if the count is greater than an int
- Added a new copyLarge(InputStream, OutputStream) method that returns a long
- Added a new copyLarge(Reader, Writer) method that returns a long
- CountingInputStream/CountingOutputStream [IO-84]
- - methods were declared as int thus the count was innacurate for large streams
+ - Methods were declared as int thus the count was innacurate for large streams
- new long based methods getByteCount()/resetByteCount() added
- existing methods changed to throw an exception if the count is greater than an int
Modified: jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOUtils.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOUtils.java?view=diff&rev=481854&r1=481853&r2=481854
==============================================================================
--- jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOUtils.java (original)
+++ jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOUtils.java Sun Dec 3 10:30:07 2006
@@ -982,10 +982,10 @@
* This method buffers the input internally, so there is no need to use a
* <code>BufferedInputStream</code>.
* <p>
- * Large streams (over 2GB) will throw an {@link ArithmeticException}
- * after the copy has completed since the correct number of bytes
- * cannot be returned as an int. For large streams use the
- * <code>copyLarge(InputStream, OutputStream)</code> method.
+ * Large streams (over 2GB) will return a bytes copied value of
+ * <code>-1</code> after the copy has completed since the correct
+ * number of bytes cannot be returned as an int. For large streams
+ * use the <code>copyLarge(InputStream, OutputStream)</code> method.
*
* @param input the <code>InputStream</code> to read from
* @param output the <code>OutputStream</code> to write to
@@ -995,13 +995,12 @@
* @throws ArithmeticException if the byte count is too large
* @since Commons IO 1.1
*/
- public static int copy(InputStream input, OutputStream output)
- throws IOException {
+ public static int copy(InputStream input, OutputStream output) throws IOException {
long count = copyLarge(input, output);
if (count > Integer.MAX_VALUE) {
- throw new ArithmeticException("The byte count " + count + " is too large to be converted to an int");
+ return -1;
}
- return (int)count;
+ return (int) count;
}
/**
@@ -1088,10 +1087,10 @@
* This method buffers the input internally, so there is no need to use a
* <code>BufferedReader</code>.
* <p>
- * Large streams (over 2GB) will throw an {@link ArithmeticException}
- * after the copy has completed since the correct number of characters
- * cannot be returned as an int. For large streams use the
- * <code>copyLarge(Reader, Writer)</code> method.
+ * Large streams (over 2GB) will return a chars copied value of
+ * <code>-1</code> after the copy has completed since the correct
+ * number of chars cannot be returned as an int. For large streams
+ * use the <code>copyLarge(Reader, Writer)</code> method.
*
* @param input the <code>Reader</code> to read from
* @param output the <code>Writer</code> to write to
@@ -1104,9 +1103,9 @@
public static int copy(Reader input, Writer output) throws IOException {
long count = copyLarge(input, output);
if (count > Integer.MAX_VALUE) {
- throw new ArithmeticException("The character count " + count + " is too large to be converted to an int");
+ return -1;
}
- return (int)count;
+ return (int) count;
}
/**
Modified: jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/IOUtilsCopyTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/IOUtilsCopyTestCase.java?view=diff&rev=481854&r1=481853&r2=481854
==============================================================================
--- jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/IOUtilsCopyTestCase.java (original)
+++ jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/IOUtilsCopyTestCase.java Sun Dec 3 10:30:07 2006
@@ -125,12 +125,7 @@
OutputStream out = new NullOutputStream();
// Test copy() method
- try {
- IOUtils.copy(in, out);
- fail("Expected copy() to throw an ArithmeticException");
- } catch (ArithmeticException ae) {
- // expected result
- }
+ assertEquals(-1, IOUtils.copy(in, out));
// reset the input
in.close();
@@ -369,12 +364,7 @@
Writer writer = new NullWriter();
// Test copy() method
- try {
- IOUtils.copy(reader, writer);
- fail("Expected copy() to throw an ArithmeticException");
- } catch (ArithmeticException ae) {
- // expected result
- }
+ assertEquals(-1, IOUtils.copy(reader, writer));
// reset the input
reader.close();
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org