InputStream Daten lesen

zer0

Erfahrenes Mitglied
Hallo,

ich lade mit HttpURLConnection eine Seite wie bild.de
Danach hole ich mir den InputStream und lese alle bytes in ein Array und dieses gebe ich als String aus.

Jedoch fehlt immer ein Teil von der Seite. Ich frage ab wieviel bytes verfügbar sind und bekomme durch read() auch zurück wieviele gelesen wurden. Trotzdem sind danach noch bytes vorhanden. Das zeigt mir availalbe() an. Aber warum?

Wie verwende ich read() richtig um die ganze Seite aus dem Stream zu lesen?

Hier ist der Code:

Java:
		InputStream in;
		
		try {
			in = uc.getInputStream();
			System.out.println("Anzahl Bytes empfangen: " + in.available());
			byte[] b = new byte[in.available()];
			System.out.println("Gelesen: " + in.read(b));
			
			String s = new String(b);
			System.out.println(s);
		} catch (IOException e) {
			e.printStackTrace();
		}

Gruß
 
Du nimmst an, dass alle Daten sofort verfügbar sind, aber wenn du "available()" aufrufst, kann ja noch ein Teil der Webseite unterwegs sein und noch nicht im Puffer deiner Netwerkkarte liegen.

Java:
InputStream in;
StringBuilder builder = new StringBuilder();
byte[] b = new byte[1024];
int numBytes;

try {
	in = uc.getInputStream();
	
	while((numBytes = in.read(b)) != 0) {
		//Jetzt mach was mit den bytes
		builder.append(new String(b, 0, numBytes, "UTF-8"));
	}
} catch (IOException e) {
	e.printStackTrace();
}

Du könntest aber den Stream auch in einen Reader stecken und direkt Zeichenweise lesen, anstatt Byteweise. http://download.oracle.com/javase/1.4.2/docs/api/java/io/InputStreamReader.html
 
Okay, klingt logisch :)

Mit dem Reader habe ich es schon gelöst, es hat mich nur interessiert warum es anders nicht geht.
Danke für die Hilfe!
 
Zurück