Java: Wznów pobieranie w URLConnection

Napisałem program, który pobiera pliki z niektórych serwerów.
Obecnie program działa poprawnie.
Ale chcę dodać do niego wsparcie wznowienia.
Robię to tak, ale plik wynikowy jest uszkodzony:

....

File fcheck=new File(SaveDir+"/"+filename);
if(resumebox.isSelected() && fcheck.exists()){
    connection.setRequestProperty("Range", "Bytes="+(fcheck.length())+"-");
}

connection.setDoInput(true);
connection.setDoOutput(true);

BufferedInputStream in = new BufferedInputStream (connection.getInputStream()); 

pbar.setIndeterminate(false);
pbar.setStringPainted(true);

java.io.FileOutputStream fos ;
if(resumebox.isSelected()){
    if(fcheck.exists()){
        if(connection.getHeaderField("Accept-Ranges").equals("bytes")){
            fos = new java.io.FileOutputStream(SaveDir+"/"+filename,true);
        }else{
            fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
        }
    }else{
        fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
    }
}else{
    fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
}

....

Testuję to na serwerze, który wiem, że obsługuje CV.
Ściągnąłem kilka bajtów.(72720)
Potem próbował go wznowić.
Następnie otworzyłem plik edytorem szesnastkowym, przy offsecie 72720 powtarzają się pierwsze bajty:
Bajty 0-36: FLV............."..........onMetaData
Bajtów 72720-72756: FLV............."..........onMetaData
Zaczyna pobierać od początku!
Podczas gdy gdy robię to przez wget robi to poprawnie i odpowiada przez pole content-Range!
Odpowiedzi serwera z "302 znalezione" I "206 częściowa zawartość" w dzienniku wget.
Czy "302 znalezione" może powodować problem?

W czym problem ?
Dzięki.
Author: RYN, 2010-08-05

2 answers

Try:

connection.setRequestProperty("Range", "bytes=" + fcheck.length() + "-");

Małe litery określa zakres według specyfikacji. Ponadto, jeśli Twój plik częściowy miał 500 bajtów, oznacza to, że twój zakres bajtów wynosi 0-499, a chcesz 500+.

 17
Author: NG.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-18 04:29:10

Problem jest w (fcheck.length() - 1): to powinno być fcheck.length().

 3
Author: Maurice Perry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-18 04:29:50