Stream unvollständig

Status
Nicht offen für weitere Antworten.

mrnice76

Mitglied
Hi!
Der Input/Output ist unvollständig, d.h. dieDatei, die Ziel des Outputstreams ist, empfängt nicht alle Bytes...
Weiß jemand, wo die verloren gehen?
Und vorallem, wie ich letztendlich den gesamten InputStream der HttpUrlConnection in eine Datei schreiben kann?

Code:
HttpURLConnection con = (HttpURLConnection) new URL(
				"http://www.irgendwas.de" )
				.openConnection();

		con.setRequestProperty("User-Agent:",
				"Mozilla/5.0 (compatible; Konqueror/3.2; Linux 2.6.2) (KHTML, like Gecko)");

		BufferedInputStream in = new BufferedInputStream(con
				.getInputStream());
		BufferedOutputStream out = new BufferedOutputStream(
				new FileOutputStream(outputHTML));
		int bytesRead = 0;
		int fileSize = in.available()+2000;
		byte[] buffer = new byte[fileSize];

		while ((bytesRead = in.read(buffer)) > 0) {
			out.write(buffer, 0, fileSize);

		}
		;
		
		out.flush();
		out.close();
		in.close();


Außerdem ist die formatierung der HTML Quelle futsch -
Wenn ich mit Scanner aus java.util arbeite, fehlt irgendwie was in der Mitte vom HTMLSourcecode, die Formatierung ist aber normal...
Kann man die Bytes irgendwie so umwandeln, damit letztenlich der Ursprüngliche Quelltext (so wie er z.B. im Firefox angezeigt wird) in der Datei steht?

Danke schonmal!
 
Allein bei dem Titel und der nicht wirklich vorhanden Fragestellung habe ich schon gar keine Lust zu antworten.
 
das mit dem in.available() gibt nicht die größe der datei zurück, sondern nur, wieviele bytes grade verfügbar sind.

zweiteres, wozu brauchst du die variable bytesRead, wenn du die nie abfragst?

probier mal folgendes:
Code:
while ((bytesRead = in.read(buffer)) > 0)
{ 
    out.write(buffer, 0, bytesRead); 
}

mit in.read(buffer) kriegst du die anzahl der tatsächlich gelesenen bytes zurück, welche du dann aus dem puffer in den ausgabestrom schreibst.

#edit 1:
wenn du immer den ganzen puffer in den ausgabestrom lenkst, ist es klar, wenn der puffer nicht vollständig gefüllt war, dass die datei auch nicht so konform gestaltet hinten raus kommt, da ja einige leere puffer-bytes möglich sind. also es können lücken entstehen!

#edit 2:
siehe )]hier (BufferedInputStream ist von FilterInputStream abgeleitet)
 
du solltest diene abfrage von >0 auf != -1 umändern - siehe javadoc. wenn die gegenseite langsamer sendet als du empfängst und schreibst kann durchaus auch mitten in der übertragung mal 0 zurück kommen, wo du dann fälschlicherweise abbricht.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben