Java tutorial
//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()); } }