File Input Output Java

/*
 * 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 maxBytes 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 maxBytes 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;
  }
}