Как включить загрузку Https с помощью Java - PullRequest
1 голос
/ 07 июня 2011

Я использую следующий код для загрузки ...

public void run()
{
    RandomAccessFile file=null;    //download wiil be stored in this file
    InputStream in=null;           //InputStream to read from
    try
    {

         HttpURLConnection conn=(HttpURLConnection)url.openConnection();    
     conn.setRequestProperty("Range","bytes="+downloaded+"-");
     if(user!=null && pwd!=null){
        String userPass=user+":"+pwd;
        String encoding = new sun.misc.BASE64Encoder().encode (userPass.getBytes());
        conn.setRequestProperty ("Authorization", "Basic " + encoding); 
     }

         conn.connect();

     //..More code 

     if(status==Status.CONNECTING)
        status=Status.DOWNLOADING;


         file=new RandomAccessFile(location,"rw");
         file.seek(downloaded);
         in=conn.getInputStream();      
     byte[] buffer;     
         while(status==Status.DOWNLOADING)
         {
            if(size-downloaded>Constants.MAX_BUFFER_SIZE)  //MAX_BUFFER_SIZE=1024
      buffer=new byte[Constants.MAX_BUFFER_SIZE];
    else
      buffer=new byte[size-downloaded];

        int read=in.read(buffer);  //reading in Buffer

        if(read==-1)
           break;

       //write to file
        file.write(buffer,0,read);
        downloaded+=read;

        //..More code
        }  //end of while


}

Я использую приведенный выше код для загрузки файла с URL-адреса в циклах. Я использую InputStream от скачивания (чтения). Должен ли я использовать каналы для повышения производительности?

Пожалуйста, помогите мне, посмотрев мой код, чтобы увеличить скорость загрузки.

1 Ответ

0 голосов
/ 07 июня 2011

Оберните InputStream BufferedInputStream и увеличьте размер буфера.Переход на реализацию канала не сильно улучшил бы на стороне клиента, даже если он довольно хорош для использования на стороне сервера.

Вам также следует создать только один byte[] и использовать его повторно.Не создавайте его каждую итерацию в цикле.

...