2012-06-11 4 views
1

У меня есть способ загрузки файла с URL-адреса. Мне нужно написать единичные тестовые примеры, чтобы возобновить загрузку, так есть ли способ отключить/включить сетевое подключение, чтобы можно было возобновить метод загрузки?Стоп/начало сетевого подключения

Мой метод загрузки выглядит следующим образом:

public String download(LatestVersionInfo info) throws FileNotFoundException, XMLStreamException,NoSuchAlgorithmException, MalformedURLException {  
     boolean isCached = checkCache(info, location); 
     String filePath = null; 
     RandomAccessFile randomAccessFile = null; 
     InputStream inputStream = null; 
     if (!isCached) { 
      try { 
       createLocation(); 
       int responseCode = 0; 
       HttpsURLConnection connection = getSSLCertificate(info 
         .getLatestVersionUrl().toString()); 
       connection.setRequestMethod("GET"); 
       connection.setRequestProperty("Range", "bytes=" + downloaded 
         + "-"); 
       connection.connect(); 
       responseCode = connection.getResponseCode(); 
       if (responseCode/100 != 2) { 
        error(); 
       } 
       int contentLength = connection.getContentLength(); 
       if (contentLength < 1) { 
        error(); 
       } 
       if (size == -1) { 
        size = contentLength; 
        stateChanged(); 
       } 
       randomAccessFile = new RandomAccessFile(
         getDownLoadPath(info.getLatestVersionUrl()), "rw"); 
       randomAccessFile.seek(downloaded); 
       inputStream = connection.getInputStream(); 
       while (status == DOWNLOADING) { 
        byte buffer[]; 
        float finalSize = size - downloaded; 
        if (finalSize > MAX_BUFFER_SIZE) { 
         buffer = new byte[(int) finalSize]; 
        } else { 
         buffer = new byte[MAX_BUFFER_SIZE]; 
        } 
        int read = inputStream.read(buffer); 
        if (read == -1) 
         break; 

        randomAccessFile.write(buffer, 0, read); 
        downloaded += read; 
        stateChanged(); 
       } 

       if (status == DOWNLOADING) { 
        status = COMPLETE; 
        stateChanged(); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        if (randomAccessFile != null) 
         randomAccessFile.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       try { 
        if (inputStream != null) 
         inputStream.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      }   
     } 
     return filePath; 
    } 

Есть ли способ отключить/включить сетевое подключение так что метод резюме загрузка может вызвать.

Спасибо.

+0

«Можете вызывать» что? В чем тут вопрос? – EJP

ответ

1

Похоже, вы пытаетесь возобновить работу после неудачного соединения, а не приостановить базовую передачу TCP каким-либо образом (что было бы намного сложнее).

Таким образом, вы можете просто убить HttpsURLConnection на полпути (из отдельного потока). Если вы поместите HttpsURLConnection connection в поле, другой поток может вызвать connection.getInputStream().close(), что приведет к отключению соединения.

Смежные вопросы