# while-Schleife / Abbruchbed. beim Einlesen eines Streams



## Johannes L. (1. Jul 2007)

Hallo,

ich lese von einem Client die HTTP-Request Header aus, aber ohne dass ich am Ende ein break; einfüge terminiert die Schleife nie:


```
from_client = new BufferedReader(new InputStreamReader(client.getInputStream()));

...

String header;

while ((header = from_client.readLine()) != null)
{
  // Process all headers until a blank new line gets read.
  if (!header.trim().equals(""))
  {
    ...
  }
  // Last header line which is empty (\r\n).
  else
  {
    logger.debug("Last Header line (\r\n)" + header);
    break;
  }
}
```

Sollte die Schleife nicht auch ohne den else-Block terminieren, wenn halt "null" gelesen wird, also das Ende des Headers?

Viele Grüße,
Johannes


----------



## anfänger15 (1. Jul 2007)

Soweit ich weiß wartet readLine bis wieder eine Zeile gesendet wird und somit terminiert es nicht. Das passiert glaube ich erst wenn die Verbindung unterbrochen wird


----------



## HoaX (1. Jul 2007)

der ende des headers ist erreicht wenn du eine leere ziele liest. das mit dem break is schon ok so. wenn du weiter liest bekommst du den request-body. aber auch der ist irgendwann zu ende. also es sollte schon mal ein ende finden, wenn auch nicht dann wenn du es dir wohl erhoffst.


----------



## Guest (1. Jul 2007)

HoaX hat gesagt.:
			
		

> der ende des headers ist erreicht wenn du eine leere ziele liest. das mit dem break is schon ok so. wenn du weiter liest bekommst du den request-body. aber auch der ist irgendwann zu ende. also es sollte schon mal ein ende finden, wenn auch nicht dann wenn du es dir wohl erhoffst.



Naja, bei GET-Requests sollte nach      


```
Last-Header-Name: value\r\n
\r\n
```

nichts mehr kommen, bei POST-Requests halt noch der urlencoded body, aber bei GET und HEAD sollte es das zumindest sein!?


----------



## kleiner_held (2. Jul 2007)

Es gilt was anfänger15 geschrieben hat: nach dem Ende des Requests komm kein from_client.readLine() == null solange der Client seinen Output-Stream offen haelt und es ist bei HTTP-Clients (im Fachjargon auch Browser genannt  ) nun mal ueblich, eine Verbindung nach einem Request offen zu halten und auch mehrere Requests ueber die gleiche Verbindung abzusetzen.
Deswegen ist muss die Schleife nach der Leerzeile notgedrungen mit break abgebrochen werden und dann kann man entscheiden, ob man noch einen Body auslesen muss oder nicht.


----------

