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;
    }

ダウンロードの再開メソッドを呼び出すことができるように、ネットワーク接続を無効/有効にする方法はありますか。

ありがとう。

4

1 に答える 1

1

何らかの方法で基盤となるTCP転送を一時停止するのではなく、接続に失敗した後に再開しようとしているようです(これははるかに困難です)。

HttpsURLConnectionしたがって、(別のスレッドから)途中で強制終了できます。をHttpsURLConnection connectionフィールドに入力すると、他のスレッドがを呼び出すことができますconnection.getInputStream().close()。これにより、接続が「失敗」します。

于 2012-06-11T12:22:00.457 に答える