File Input Output Java

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Main {
  /**
   * 
   * @param in The InputStream to read the bytes from.
   * @return A byte array containing the bytes that were read.
   * @throws IOException If I/O error occurred.
   */
  public static final byte[] readFully(InputStream in)
    throws IOException
  {
    ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
    transfer(in, out);
    out.close();
    return out.toByteArray();
  }
  /**
   * Transfers all bytes that can be read from in to out.
   *
   * @param in The InputStream to read data from.
   * @param out The OutputStream to write data to.
   * @return The total number of bytes transfered.
   */
  public static final long transfer(InputStream in, OutputStream out)
    throws IOException
  {
    long totalBytes = 0;
    int bytesInBuf = 0;
    byte[] buf = new byte[4096];
    while ((bytesInBuf = in.read(buf)) != -1) {
      out.write(buf, 0, bytesInBuf);
      totalBytes += bytesInBuf;
    }
    return totalBytes;
  }
}