2016-07-05 7 views
-1

Ich arbeite an einem Java-Datei-Downloader, also habe ich gerade eine Videodatei mit App und ohne App heruntergeladen, so sah ich Dateigrößenunterschiede zwischen diesen Dateien. Und ich konnte die Datei, die ich heruntergeladen habe, nicht mit meiner Java-App öffnen. Wenn ich sie mit Notepad ++ öffne, sah ich zufällig generierte Symbole darin. Was mache ich so falsch?Dateigrößenunterschied beim Herunterladen der Datei

http://i.imgur.com/lKaofVg.png - hier, wie Sie zufällig generierte Fragezeichen dort sehen können. http://i.imgur.com/8bLC2R7.png - aber in der ursprünglichen Datei existieren sie nicht. http://i.imgur.com/H3MGgwl.png - hier ist die Dateigröße, ich habe gerade "+" für die generierte Datei platziert.

Hier ist mein Code:

 String currentRange = "bytes=0-"+num*13107200; 
     System.out.println(num + " is executing"); 
     URL file = new URL(url); 
     FileOutputStream stream = new FileOutputStream("tmp"+num+".mp4"); 
     HttpURLConnection urlConnection = (HttpURLConnection) file.openConnection(); 
     urlConnection.setRequestProperty("Range", currentRange); 
     urlConnection.connect(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       urlConnection.getInputStream())); 
     String inputLine; 

     final PrintStream printStream = new PrintStream(stream); 
     while ((inputLine = in.readLine()) != null) 
      printStream.println(inputLine); 
     in.close(); 
     printStream.close(); 
+3

nicht Leser/Schreiber/Druckdaten zur Verarbeitung Verwenden Sie Binärdateien, diese sind nur für Textdaten. Benutze die rohen Ströme. –

+4

Eine mp4-Datei ist eine Binärdatei. Sie können nicht erwarten, lesbaren Text zu sehen, wenn Sie einen mit einem Texteditor öffnen. Und da es sich um eine Binärdatei handelt, sollten Sie keinen Reader verwenden, mit dem Sie Text lesen können. Verwenden Sie einen InputStream. Beachten Sie, dass Dateien nur so wie sie sind heruntergeladen werden können. Dies gilt für alle Dateien, einschließlich Textdateien. –

+1

'' readLine() '' teilt die Daten bei jedem Zeilenumbruch auf. Tun Sie das nicht, Sie lesen rohe Binärdaten. Und warum öffnest du eine Videodatei mit notepad ++ und bist überrascht, "zufällig generierte Symbole" zu sehen? Was hast du sonst noch erwartet? – f1sh

Antwort

0

ich mit diesem Code gelöst, dank dieser Frage: Reading binary file from URLConnection und @ piet.t

InputStream input = urlConnection.getInputStream(); 
      byte[] buffer = new byte[4096]; 
      int n = - 1; 
      while ((n = input.read(buffer)) != -1) 
      { 
       stream.write(buffer, 0, n); 
      }