# Fehler bei PDF-Download



## const82 (1. Dez 2011)

Hallo Leute,
ich habe folgendes Problem. Ich will mit meinem kleinen Stück Quellcode von Zeit zu Zeit eine PDF herunterladen. Er lädt sie auch herunter. Sie ist dann allerdings fehlerhaft oder unvollständig und ich bekomme beim öffnen je nach pdf (habe mehrere versucht) andere Fehlermeldung. Eben zum Beispiel, dass die Datei fehlerhaft oder unvollständig ist oder auch mal das ihm eine Schrift fehlt.

Hat jemand einen Tip für mich?


```
int size = 1024;

String url = "http://www.irgendeine-url.de/pdf-datei.pdf";
BufferedInputStream in = new java.io.BufferedInputStream(new java.net.URL(url).openStream());
FileOutputStream fout = new java.io.FileOutputStream("test.pdf");
BufferedOutputStream out = new BufferedOutputStream(fout, size);
byte data[] = new byte[size];
            
while (in.read(data, 0, size) >= 0) {
     out.write(data);
}

out.close();
in.close();
```

Vielen Dank schonmal.


----------



## SlaterB (1. Dez 2011)

wenn du ganze Arrays schreibst und liest kannst du dir BufferStreams jeweils sparen,
die bringen vor allem etwas wenn jedes Byte einzeln durchgeleitet wird, was in deinem Fall wohl den Fehler verhindern würde,
aber allgemein nicht unbedingt das Ziel ist

dein Problem ist hier, dass du immer das komplette Array schreibst, obwohl es in 99.9% aller Fälle ganz am Ende nicht genau mit 1024 neuen Werten befüllt wird, im hinteren Teil des Arrays stehen noch Daten vom vorherigen Durchlauf,
auch 0-Standardwerte wären kaum besser,
du musst dir den Rückgabewert des read()-Aufrufs merken und beim write verwenden, damit nur genau soviel geschrieben wird wie auch gelesen

zu finden in jedem Beispiel mit Streams, Array und Schleife..
Copying One File to Another | Example Depot


----------



## Michael... (1. Dez 2011)

Die read Methode befüllt das byte Array 
	
	
	
	





```
data
```
 nicht unbedingt komplett, dadurch werden u.U. zuviele und fehlerhafte Bytes in die Datei geschrieben.
Allerdings liefert die read Methode als Rückgabewert die Anzahl der gelesenen Bytes, mit dieser musst Du dann beim Schreiben die Anzahl der zu schreibenden Bytes eingrenzen.


----------



## const82 (1. Dez 2011)

Meintet ihr so?


```
int size = 1024;

String url = "http://www.irgendeine-url.de/pdf-datei.pdf";
BufferedInputStream in = new java.io.BufferedInputStream(new java.net.URL(url).openStream());
FileOutputStream fout = new java.io.FileOutputStream("test.pdf");
BufferedOutputStream out = new BufferedOutputStream(fout, size);
byte data[] = new byte[size];
int len;
while ((len = in.read(data)) >= 0) {
   out.write(data, 0, len);
}

out.close();
in.close();
```


----------



## SlaterB (1. Dez 2011)

ein (evtl.) erfolgreicher Test mit einer vorher kaputt gespeicherten Datei würde dir das nicht beantworten?


----------



## const82 (1. Dez 2011)

Ich habs. Vielen Dank.


----------

