Unerwartetes Ende des Stream-Fehlers beim Download?

Mögliche Duplikat:
Android: "Unerwartetes Ende des Streams" Ausnahme Herunterladen großer Dateien

Ich gehe eine Datei von ca. 5MB mit HttpURLConnection aber auf halbem Weg während des Downlod bekomme ich einen "unerwarteten Ende des Streams" Fehler in dieser Zeile meines Codes:

  • Wie bekomme ich Stadtnamen aus Breiten- und Längengradkoordinaten in Google Maps?
  • Wie benutzt man greenrobot, um Daten an Aktivität oder Fragment weiterzugeben, die noch nicht initialisiert wurde?
  • Kompilieren Lua lib für Android - Erfolg, aber seltsame segfaults
  • Menu.findItem gibt null zurück
  • Wie kann Google Drive Credentials in Android App eingerichtet werden?
  • Wie bekomme ich TODO Kommentare in xml?
  • while ((count = input.read(data)) > 0) { 

    Hier ist das LOG:

     11-20 16:05:55.749: ERROR/PRINTSTACK(3425): STACK:unexpected end of stream 11-20 16:05:55.749: WARN/System.err(3425): java.io.IOException: unexpected end of stream 11-20 16:05:55.749: WARN/System.err(3425): at org.apache.harmony.luni.internal.net.www.protocol.http.FixedLengthInputStream.read(FixedLengthInputStream.java:47) 11-20 16:05:55.749: WARN/System.err(3425): at java.io.BufferedInputStream.read(BufferedInputStream.java:319) 11-20 16:05:55.749: WARN/System.err(3425): at java.io.FilterInputStream.read(FilterInputStream.java:133) 11-20 16:05:55.759: WARN/System.err(3425): at com.conjure.skiproj.DownloadService$Job.process(DownloadService.java:265) 11-20 16:05:55.759: WARN/System.err(3425): at com.conjure.skiproj.DownloadService$1.run(DownloadService.java:193) 11-20 16:05:55.759: WARN/System.err(3425): at java.lang.Thread.run(Thread.java:1019) 

    Hilfe !!

    EDIT: Weitere Informationen zum Code, der den Inputstream einrichtet:

      HttpURLConnection conexion = (HttpURLConnection)url.openConnection(); conexion.setRequestMethod("GET"); conexion.setReadTimeout(20000); conexion.connect(); File file = new File(root.getAbsolutePath()+"/", fileName); int lenghtOfFile = conexion.getContentLength(); InputStream input = new BufferedInputStream(url.openStream()); OutputStream output = new FileOutputStream(file); byte data[] = new byte[8192]; ........................... 

    EDIT 2: Got einen neuen Fehler IndexOutOfBoundsException auf 25% des Downloads in der folgenden Zeile:

      output.write(data, 0, count); 

    LOG unten:

     11-20 17:47:02.311: ERROR/totaltotal(303): 24 11-20 17:47:02.311: INFO/System.out(303): countcountcount:4332 11-20 17:47:02.330: ERROR/totaltotal(303): 24 11-20 17:47:02.330: INFO/System.out(303): countcountcount:2904 11-20 17:47:02.330: ERROR/totaltotal(303): 25 11-20 17:47:02.330: INFO/System.out(303): countcountcount:1452 11-20 17:47:02.330: ERROR/totaltotal(303): 25 11-20 17:47:02.650: INFO/System.out(303): countcountcount:4356 11-20 17:47:02.650: ERROR/totaltotal(303): 25 11-20 17:47:02.650: INFO/System.out(303): countcountcount:-1 11-20 17:47:02.660: ERROR/totaltotal(303): 25 11-20 17:47:02.892: DEBUG/dalvikvm(303): GC_FOR_MALLOC freed 10770 objects / 490896 bytes in 143ms 11-20 17:47:03.060: ERROR/PRINTSTACK(303): STACK:Arguments out of bounds 11-20 17:47:03.060: WARN/System.err(303): java.lang.IndexOutOfBoundsException: Arguments out of bounds 11-20 17:47:03.070: WARN/System.err(303): at java.io.FileOutputStream.write(FileOutputStream.java:288) 11-20 17:47:03.080: WARN/System.err(303): at com.conjure.skiproj.DownloadService$Job.process(DownloadService.java:275) 11-20 17:47:03.080: WARN/System.err(303): at com.conjure.skiproj.DownloadService$1.run(DownloadService.java:191) 11-20 17:47:03.080: WARN/System.err(303): at java.lang.Thread.run(Thread.java:1096) 

    EDIT 3: Ich habe den Fehler zurück in die FixedLengthInputStream Klasse und dann weiter zurück zu AbstractHttpInputStream Klasse in wo gibt es diese Methode:

     /** * Calls abort on the cache entry and disconnects the socket. This * should be invoked when the connection is closed unexpectedly to * invalidate the cache entry and to prevent the HTTP connection from * being reused. HTTP messages are sent in serial so whenever a message * cannot be read to completion, subsequent messages cannot be read * either and the connection must be discarded. * * <p>An earlier implementation skipped the remaining bytes, but this * requires that the entire transfer be completed. If the intention was * to cancel the transfer, closing the connection is the only solution. */ protected final void unexpectedEndOfInput() { if (cacheRequest != null) { cacheRequest.abort(); } httpURLConnection.releaseSocket(false); } 

    So scheint es, dass im Falle eines Http-Meldungsfehlers der gesamte Download-Stream storniert wird.

  • PictureListener ist veraltet und veraltet, gibt es einen Ersatz?
  • Warum keine Service.onStop-Methode?
  • AsyncTask, muss es so eine Performance-Strafe treffen ...?
  • Wie benutzt man Android-Leinwand, um ein Rectangle mit nur topleft und topright Ecken runden?
  • Wie kann ich den SHA-256-Hash eines Strings in Android berechnen?
  • Android-Kamera AutoFocus auf Anfrage
  • 2 Solutions collect form web for “Unerwartetes Ende des Stream-Fehlers beim Download?”

    Diese Ausnahme wird von FixedLengthInputStream ausgelöst, wenn die erwartete Anzahl von Bytes (in der Regel in den Content-Length-Header der Antwort gesetzt) ​​größer als die tatsächlichen Daten in der Antwort ist. Überprüfen Sie, ob der Inhalt-Länge-Header korrekt ist. (Wenn Sie Ihren eigenen Wert für die Inhalt Länge liefern, stellen Sie sicher, dass es richtig ist.)

    Es würde helfen, Ihren Code zu sehen, der den Eingangsstrom einrichtet.

    Eine Anzahl von 0 ist zulässig, soweit ich es im Falle eines Netzwerkproblems verstehe. Versuchen…

     while ((count = input.read(data)) != -1) { if (count != 0) { ... } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.