Repository: commons-compress Updated Branches: refs/heads/compress-2.0 0a6d97a12 -> b74e53866
move IOUtils Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/27686efc Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/27686efc Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/27686efc Branch: refs/heads/compress-2.0 Commit: 27686efc56d4d10bc110443955da5d80ffb5a8b2 Parents: 0a6d97a Author: Stefan Bodewig <bode...@apache.org> Authored: Sat Apr 29 19:49:20 2017 +0200 Committer: Stefan Bodewig <bode...@apache.org> Committed: Sat Apr 29 19:49:20 2017 +0200 ---------------------------------------------------------------------- .../compress2/formats/ar/ArArchiveInput.java | 1 + .../commons/compress2/formats/ar/IOUtils.java | 204 ------------------- .../apache/commons/compress2/util/IOUtils.java | 203 ++++++++++++++++++ .../formats/ar/ArArchiveFormatTest.java | 2 +- .../compress2/formats/ar/RoundTripTest.java | 1 + 5 files changed, 206 insertions(+), 205 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/27686efc/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java b/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java index 8a62f8a..f39efec 100644 --- a/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java +++ b/src/main/java/org/apache/commons/compress2/formats/ar/ArArchiveInput.java @@ -31,6 +31,7 @@ import java.nio.file.attribute.FileTime; import org.apache.commons.compress2.archivers.ArchiveEntryParameters; import org.apache.commons.compress2.archivers.OwnerInformation; import org.apache.commons.compress2.archivers.spi.AbstractArchiveInput; +import org.apache.commons.compress2.util.IOUtils; /** * Implements the "ar" archive format. http://git-wip-us.apache.org/repos/asf/commons-compress/blob/27686efc/src/main/java/org/apache/commons/compress2/formats/ar/IOUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress2/formats/ar/IOUtils.java b/src/main/java/org/apache/commons/compress2/formats/ar/IOUtils.java deleted file mode 100644 index a7a429e..0000000 --- a/src/main/java/org/apache/commons/compress2/formats/ar/IOUtils.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.commons.compress2.formats.ar; - -import java.io.ByteArrayOutputStream; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.ByteBuffer; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.WritableByteChannel; - -/** - * THIS CLASS WILL CERTAINLY NOT STAY HERE. - * @Immutable - */ -final class IOUtils { - - /** Private constructor to prevent instantiation of this utility class. */ - private IOUtils(){ - } - - /** - * Copies the content of a InputStream into an OutputStream. - * Uses a default buffer size of 8024 bytes. - * - * @param input - * the InputStream to copy - * @param output - * the target Stream - * @throws IOException - * if an error occurs - */ - public static long copy(final InputStream input, final OutputStream output) throws IOException { - return copy(input, output, 8024); - } - - /** - * Copies the content of a InputStream into an OutputStream - * - * @param input - * the InputStream to copy - * @param output - * the target Stream - * @param buffersize - * the buffer size to use - * @throws IOException - * if an error occurs - */ - public static long copy(final InputStream input, final OutputStream output, int buffersize) throws IOException { - final byte[] buffer = new byte[buffersize]; - int n = 0; - long count=0; - while (-1 != (n = input.read(buffer))) { - output.write(buffer, 0, n); - count += n; - } - return count; - } - - public static long copy(final ReadableByteChannel input, final WritableByteChannel output) throws IOException { - return copy(input, output, 4096); - } - - public static long copy(final ReadableByteChannel input, final WritableByteChannel output, int buffersize) throws IOException { - ByteBuffer buffer = ByteBuffer.allocate(buffersize); - int n = 0; - long count=0; - while (-1 != (n = input.read(buffer))) { - buffer.flip(); - output.write(buffer); - buffer.clear(); - count += n; - } - return count; - } - - /** - * Skips the given number of bytes by repeatedly invoking skip on - * the given input stream if necessary. - * - * <p>This method will only skip less than the requested number of - * bytes if the end of the input stream has been reached.</p> - * - * @param input stream to skip bytes in - * @param numToSkip the number of bytes to skip - * @return the number of bytes actually skipped - * @throws IOException - */ - public static long skip(InputStream input, long numToSkip) throws IOException { - long available = numToSkip; - while (numToSkip > 0) { - long skipped = input.skip(numToSkip); - if (skipped == 0) { - break; - } - numToSkip -= skipped; - } - return available - numToSkip; - } - - /** - * Reads as much from input as possible to fill the given array. - * - * <p>This method may invoke read repeatedly to fill the array and - * only read less bytes than the length of the array if the end of - * the stream has been reached.</p> - * - * @param input stream to read from - * @param b buffer to fill - * @return the number of bytes actually read - * @throws IOException - */ - public static int readFully(InputStream input, byte[] b) throws IOException { - return readFully(input, b, 0, b.length); - } - - /** - * Reads as much from input as possible to fill the given array - * with the given amount of bytes. - * - * <p>This method may invoke read repeatedly to read the bytes and - * only read less bytes than the requested length if the end of - * the stream has been reached.</p> - * - * @param input stream to read from - * @param b buffer to fill - * @param offset offset into the buffer to start filling at - * @param len of bytes to read - * @return the number of bytes actually read - * @throws IOException - * if an I/O error has occurred - */ - public static int readFully(InputStream input, byte[] b, int offset, int len) - throws IOException { - if (len < 0 || offset < 0 || len + offset > b.length) { - throw new IndexOutOfBoundsException(); - } - int count = 0, x = 0; - while (count != len) { - x = input.read(b, offset + count, len - count); - if (x == -1) { - break; - } - count += x; - } - return count; - } - - // toByteArray(InputStream) copied from: - // commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java?revision=1428941 - // January 8th, 2013 - // - // Assuming our copy() works just as well as theirs! :-) - - /** - * Gets the contents of an <code>InputStream</code> as a <code>byte[]</code>. - * <p> - * This method buffers the input internally, so there is no need to use a - * <code>BufferedInputStream</code>. - * - * @param input the <code>InputStream</code> to read from - * @return the requested byte array - * @throws NullPointerException if the input is null - * @throws IOException if an I/O error occurs - * @since 1.5 - */ - public static byte[] toByteArray(final InputStream input) throws IOException { - final ByteArrayOutputStream output = new ByteArrayOutputStream(); - copy(input, output); - return output.toByteArray(); - } - - /** - * Closes the given Closeable and swallows any IOException that may occur. - * @param c Closeable to close, can be null - * @since 1.7 - */ - public static void closeQuietly(Closeable c) { - if (c != null) { - try { - c.close(); - } catch (IOException ignored) { // NOPMD - } - } - } -} http://git-wip-us.apache.org/repos/asf/commons-compress/blob/27686efc/src/main/java/org/apache/commons/compress2/util/IOUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress2/util/IOUtils.java b/src/main/java/org/apache/commons/compress2/util/IOUtils.java new file mode 100644 index 0000000..35105e3 --- /dev/null +++ b/src/main/java/org/apache/commons/compress2/util/IOUtils.java @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.commons.compress2.util; + +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; + +/** + * @Immutable + */ +public final class IOUtils { + + /** Private constructor to prevent instantiation of this utility class. */ + private IOUtils(){ + } + + /** + * Copies the content of a InputStream into an OutputStream. + * Uses a default buffer size of 8024 bytes. + * + * @param input + * the InputStream to copy + * @param output + * the target Stream + * @throws IOException + * if an error occurs + */ + public static long copy(final InputStream input, final OutputStream output) throws IOException { + return copy(input, output, 8024); + } + + /** + * Copies the content of a InputStream into an OutputStream + * + * @param input + * the InputStream to copy + * @param output + * the target Stream + * @param buffersize + * the buffer size to use + * @throws IOException + * if an error occurs + */ + public static long copy(final InputStream input, final OutputStream output, int buffersize) throws IOException { + final byte[] buffer = new byte[buffersize]; + int n = 0; + long count=0; + while (-1 != (n = input.read(buffer))) { + output.write(buffer, 0, n); + count += n; + } + return count; + } + + public static long copy(final ReadableByteChannel input, final WritableByteChannel output) throws IOException { + return copy(input, output, 4096); + } + + public static long copy(final ReadableByteChannel input, final WritableByteChannel output, int buffersize) throws IOException { + ByteBuffer buffer = ByteBuffer.allocate(buffersize); + int n = 0; + long count=0; + while (-1 != (n = input.read(buffer))) { + buffer.flip(); + output.write(buffer); + buffer.clear(); + count += n; + } + return count; + } + + /** + * Skips the given number of bytes by repeatedly invoking skip on + * the given input stream if necessary. + * + * <p>This method will only skip less than the requested number of + * bytes if the end of the input stream has been reached.</p> + * + * @param input stream to skip bytes in + * @param numToSkip the number of bytes to skip + * @return the number of bytes actually skipped + * @throws IOException + */ + public static long skip(InputStream input, long numToSkip) throws IOException { + long available = numToSkip; + while (numToSkip > 0) { + long skipped = input.skip(numToSkip); + if (skipped == 0) { + break; + } + numToSkip -= skipped; + } + return available - numToSkip; + } + + /** + * Reads as much from input as possible to fill the given array. + * + * <p>This method may invoke read repeatedly to fill the array and + * only read less bytes than the length of the array if the end of + * the stream has been reached.</p> + * + * @param input stream to read from + * @param b buffer to fill + * @return the number of bytes actually read + * @throws IOException + */ + public static int readFully(InputStream input, byte[] b) throws IOException { + return readFully(input, b, 0, b.length); + } + + /** + * Reads as much from input as possible to fill the given array + * with the given amount of bytes. + * + * <p>This method may invoke read repeatedly to read the bytes and + * only read less bytes than the requested length if the end of + * the stream has been reached.</p> + * + * @param input stream to read from + * @param b buffer to fill + * @param offset offset into the buffer to start filling at + * @param len of bytes to read + * @return the number of bytes actually read + * @throws IOException + * if an I/O error has occurred + */ + public static int readFully(InputStream input, byte[] b, int offset, int len) + throws IOException { + if (len < 0 || offset < 0 || len + offset > b.length) { + throw new IndexOutOfBoundsException(); + } + int count = 0, x = 0; + while (count != len) { + x = input.read(b, offset + count, len - count); + if (x == -1) { + break; + } + count += x; + } + return count; + } + + // toByteArray(InputStream) copied from: + // commons/proper/io/trunk/src/main/java/org/apache/commons/io/IOUtils.java?revision=1428941 + // January 8th, 2013 + // + // Assuming our copy() works just as well as theirs! :-) + + /** + * Gets the contents of an <code>InputStream</code> as a <code>byte[]</code>. + * <p> + * This method buffers the input internally, so there is no need to use a + * <code>BufferedInputStream</code>. + * + * @param input the <code>InputStream</code> to read from + * @return the requested byte array + * @throws NullPointerException if the input is null + * @throws IOException if an I/O error occurs + * @since 1.5 + */ + public static byte[] toByteArray(final InputStream input) throws IOException { + final ByteArrayOutputStream output = new ByteArrayOutputStream(); + copy(input, output); + return output.toByteArray(); + } + + /** + * Closes the given Closeable and swallows any IOException that may occur. + * @param c Closeable to close, can be null + * @since 1.7 + */ + public static void closeQuietly(Closeable c) { + if (c != null) { + try { + c.close(); + } catch (IOException ignored) { // NOPMD + } + } + } +} http://git-wip-us.apache.org/repos/asf/commons-compress/blob/27686efc/src/test/java/org/apache/commons/compress2/formats/ar/ArArchiveFormatTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/compress2/formats/ar/ArArchiveFormatTest.java b/src/test/java/org/apache/commons/compress2/formats/ar/ArArchiveFormatTest.java index 051c0d4..c7b4165 100644 --- a/src/test/java/org/apache/commons/compress2/formats/ar/ArArchiveFormatTest.java +++ b/src/test/java/org/apache/commons/compress2/formats/ar/ArArchiveFormatTest.java @@ -22,7 +22,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; - +import org.apache.commons.compress2.util.IOUtils; import org.junit.Assert; import org.junit.Test; http://git-wip-us.apache.org/repos/asf/commons-compress/blob/27686efc/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java b/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java index 77ad80f..58c8038 100644 --- a/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java +++ b/src/test/java/org/apache/commons/compress2/formats/ar/RoundTripTest.java @@ -37,6 +37,7 @@ import org.junit.Test; import org.apache.commons.compress2.archivers.ArchiveEntryParameters; import org.apache.commons.compress2.archivers.ArchiveInput; import org.apache.commons.compress2.archivers.ArchiveOutput; +import org.apache.commons.compress2.util.IOUtils; public class RoundTripTest {