Я сделал простой менеджер загрузок на Java, мой менеджер загрузок способен загружать, не может загружать большие файлы из сети - PullRequest
1 голос
/ 21 октября 2011

Я не могу загружать большие файлы из сети (более 1 МБ файла).Тем не менее, моя программа может загружать эти большие файлы с локального хоста.Что-нибудь еще, что мне нужно сделать, чтобы загрузить большие файлы?Вот фрагмент кода:

 try {

        //connection to the remote object referred to by the URL.
        url = new URL(urlPath);
        // connection to the Server
        conn = (HttpURLConnection) url.openConnection();

        // get the input stream from conn
        in = new BufferedInputStream(conn.getInputStream());

        // save the contents to a file
        raf = new RandomAccessFile("output","rw");


        byte[] buf = new byte[ BUFFER_SIZE ];
        int read;

        while( ((read = in.read(buf,0,BUFFER_SIZE)) != -1) )
    {

            raf.write(buf,0,BUFFER_SIZE);
    }

    } catch ( IOException e ) {

    }
    finally {

    }

Заранее спасибо.

1 Ответ

3 голосов
/ 21 октября 2011

Вы игнорируете, сколько байтов вы фактически прочитали:

while( ((read = in.read(buf,0,BUFFER_SIZE)) != -1) )
{
    raf.write(buf,0,BUFFER_SIZE);
}

Ваш write вызов всегда записывает весь буфер, даже если вы его не заполнялис вызовом read.Вы хотите:

while ((read = in.read(buf, 0, BUFFER_SIZE)) != -1)
{
    raf.write(buf, 0, read);
}
...