Mega Code Archive

 
Categories / Java / File Input Output
 

Utility methods for handling streams

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