StreamUtils.java Source code

Java tutorial

Introduction

Here is the source code for StreamUtils.java

Source

//The contents of this file are subject to the Mozilla Public License Version 1.1
//(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.mozilla.org/MPL/
//
//Software distributed under the License is distributed on an "AS IS" basis,
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
//for the specific language governing rights and
//limitations under the License.
//
//The Original Code is "The Columba Project"
//
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. 
//
//All Rights Reserved.

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * Contains utility methods for handling streams.
 */
public class StreamUtils {
    private static final int BUFFERSIZE = 8000;

    /**
     * Copies length bytes from an InputStream to an OutputStream.
     * 
     * @param in
     *            InputStream from wihch the bytes are to copied.
     * @param out
     *            OutputStream in which the bytes are copied.
     * @param length
     *            The number of bytes to copy
     * @return Number of bytes which are copied.
     * @throws IOException
     *             If the streams are unavailable.
     */
    public static int streamCopy(InputStream in, OutputStream out, int length) throws IOException {
        byte[] buffer = new byte[BUFFERSIZE];
        int read;
        int copied = 0;

        while ((read = in.read(buffer, 0, Math.min(BUFFERSIZE, length - copied))) > 0) {
            out.write(buffer, 0, read);
            copied += read;
        }

        return copied;
    }

    /**
     * Copies all bytes from an InputStream to an OutputStream. The buffer size
     * is set to 8000 bytes.
     * 
     * @param _isInput
     *            InputStream from wihch the bytes are to copied.
     * @param _osOutput
     *            OutputStream in which the bytes are copied.
     * @return Number of bytes which are copied.
     * @throws IOException
     *             If the Streams are unavailable.
     */
    public static long streamCopy(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[BUFFERSIZE];
        int read;
        long copied = 0;

        while ((read = in.read(buffer)) > 0) {
            out.write(buffer, 0, read);
            copied += read;
        }

        return copied;
    }

    /**
     * Reads a InputStream of chars into a StringBuffer.
     * 
     * @param in
     *            the InputStream to read from
     * @return the interpreted InputStream
     * @throws IOException
     */
    public static StringBuffer readCharacterStream(InputStream in) throws IOException {
        StringBuffer result = new StringBuffer(in.available());
        int read = in.read();

        while (read > 0) {
            result.append((char) read);
            read = in.read();
        }

        in.close();

        return result;
    }

    public static byte[] readInByteArray(InputStream in) throws IOException {
        byte[] result = new byte[in.available()];

        in.read(result);

        in.close();

        return result;
    }

    /**
     * Copies all bytes from the given InputStream into an internal
     * ByteArrayOutputStream and returnes a new InputStream with all bytes from
     * the ByteArrayOutputStream. The data are real copied so this method
     * "clones" the given Inputstream and returns a new InputStream with same
     * data.
     * 
     * @param from
     *            InputStream from which all data are to copy
     * @return a new InputStream with all data from the given InputStream
     * @throws IOException
     */
    public static InputStream streamClone(InputStream from) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        streamCopy(from, out);

        return new ByteArrayInputStream(out.toByteArray());
    }
}