Mega Code Archive

 
Categories / Java / File Input Output
 

Reads at most certain bytes from input stream and returns them as a byte array

/*  * Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.  *  * Licensed under the Aduna BSD-style license.  */ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Main {   /**    * Reads at most <tt>maxBytes</tt> bytes from the supplied input stream and    * returns them as a byte array.    *    * @param in The InputStream supplying the bytes.    * @param maxBytes The maximum number of bytes to read from the input    * stream.    * @return A byte array of size <tt>maxBytes</tt> if the input stream can    * produce that amount of bytes, or a smaller byte containing all available    * bytes from the stream otherwise.    */   public static final byte[] readBytes(InputStream in, int maxBytes)     throws IOException   {     byte[] result = new byte[maxBytes];     int bytesRead = in.read(result);     int totalBytesRead = bytesRead;     while (totalBytesRead < maxBytes && bytesRead >= 0) {       // Read more bytes       bytesRead = in.read(result, bytesRead, maxBytes - bytesRead);       if (bytesRead > 0) {         totalBytesRead += bytesRead;       }     }     if (totalBytesRead < 0) {       // InputStream at end-of-file       result = new byte[0];     }     else if (totalBytesRead < maxBytes) {       // Create smaller byte array       byte[] tmp = new byte[totalBytesRead];       System.arraycopy(result, 0, tmp, 0, totalBytesRead);       result = tmp;     }     return result;   } }