How big is your test file?

How much memory does your JVM have ?
Print out Runtime.getRuntime().maxMemory() / (1024*1024) to get the Mb.

Since you are reading from a file, here is a simpler method to load the
contents of a file into a byte array:

    /**
     * Load a file into a byte array. <br>
     * Only use this method for files small enough to fit into memory.
     *
     * @param file the file to load
     * @return the byte array that is the contents of the file.
     * @throws IOException
     */
    public static byte[] load(File file) throws IOException
    {
        // Max file length of 2GB should not be a problem since will run out
of
        // memory first.
        int len = (int) file.length();

        FileInputStream fileInputStream = new FileInputStream(file);

        byte[] data = new byte[len];

        int off = 0;
        int readLen = data.length;
        do
        {
            int cnt = fileInputStream.read(data, off, readLen);
            off += cnt;
            readLen -= cnt;
        } while (off < len);

        fileInputStream.close();
        return data;
    }


On Fri, Jun 5, 2009 at 12:38 AM, Johnson nickel <sarava...@elogic.co.in>wrote:

>
>  Hi,
>
>        I have problem with this readInputStream method. I have checked in
> (postgresql)database, which i
> used column data type is bytea its default column size 1gb data. I will
> explain my problem clearly,
>
>
> Step1 :
>          I checked in java file itself,
>
>  public static void main(String args[])
> {
> byte[] filedata = readInputStream(new FileInputStream("test.pdf"));
> // byte filedata = null
>  // DB code to store binary data
>
> }
>
>
>
> If, i run the code, it shows outofmemory error java heap size.
>
>
>
>
>
>
>  /** Read an input stream in its entirety into a byte array */
>     public static byte[] readInputStream(InputStream inputStream) throws
>  IOException {
>         int bufSize = 1024 * 1024;
>         byte[] content;
>
>         List<byte[]> parts = new LinkedList();
>         InputStream in = new BufferedInputStream(inputStream);
>
>         byte[] readBuffer = new byte[bufSize];
>         byte[] part = null;
>         int bytesRead = 0;
>
>         // read everyting into a list of byte arrays
>         while ((bytesRead = in.read(readBuffer, 0, bufSize)) != -1) {
>             part = new byte[bytesRead];
>             System.arraycopy(readBuffer, 0, part, 0, bytesRead);
>             parts.add(part);
>         }
>
>         // calculate the total size
>         int totalSize = 0;
>         for (byte[] partBuffer : parts) {
>             totalSize += partBuffer.length;
>         }
>
>         // allocate the array
>         content = new byte[totalSize];
>         int offset = 0;
>         for (byte[] partBuffer : parts) {
>             System.arraycopy(partBuffer, 0, content, offset,
>  partBuffer.length);
>             offset += partBuffer.length;
>         }
>
>         return content;
>     }
>
>
>
> --
> View this message in context:
> http://www.nabble.com/Huge-File-upload-in-struts-2-tp23870472p23881060.html
> Sent from the Struts - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
>
>

Reply via email to