Gast
2010-06-19, 02:38:37
Hi,
ich habe einen Inputstream von einem HTTP response und möchte nun die Header als String lesen und die eigentlichen Daten in ein byte Array ablegen.
Mein Ansatz sieht wie folgt aus:
InputStream stream = remoteSocket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(stream));
List<String> requestLines = new ArrayList<String>();
ByteArrayOutputStream message = new ByteArrayOutputStream();
String line;
while ((line = in.readLine()) != null && !line.equals(""))
requestLines.add(line);
byte[] data = new byte[1024];
while (true) {
int len = stream.read(data);
if ( len > 0 )
message.write(data, 0, len);
else if ( len == 0 )
try {
Thread.sleep(20);
} catch (Exception e) {
}
else
break;
}
Das Ergebnis sieht allerdings immer so aus, dass ich nach den Headern nichts mehr bekomme d.h. "stream.read(data)" liefert gleich beim ersten aufruf -1. Also als ob keine Daten mehr vorhanden sind.
Ich verstehe allerdings nicht warum... Wenn ich nach der ersten while Schleife nochmals line = in.readLine() aufrufe, kommt sehr wohl noch was an, und zwar genau das, was ich im ByteArrayOutputStream haben will.
ich habe einen Inputstream von einem HTTP response und möchte nun die Header als String lesen und die eigentlichen Daten in ein byte Array ablegen.
Mein Ansatz sieht wie folgt aus:
InputStream stream = remoteSocket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(stream));
List<String> requestLines = new ArrayList<String>();
ByteArrayOutputStream message = new ByteArrayOutputStream();
String line;
while ((line = in.readLine()) != null && !line.equals(""))
requestLines.add(line);
byte[] data = new byte[1024];
while (true) {
int len = stream.read(data);
if ( len > 0 )
message.write(data, 0, len);
else if ( len == 0 )
try {
Thread.sleep(20);
} catch (Exception e) {
}
else
break;
}
Das Ergebnis sieht allerdings immer so aus, dass ich nach den Headern nichts mehr bekomme d.h. "stream.read(data)" liefert gleich beim ersten aufruf -1. Also als ob keine Daten mehr vorhanden sind.
Ich verstehe allerdings nicht warum... Wenn ich nach der ersten while Schleife nochmals line = in.readLine() aufrufe, kommt sehr wohl noch was an, und zwar genau das, was ich im ByteArrayOutputStream haben will.