Inputstream -> verschiedene Objekte lesen

T

Tarek1337

Gast
Hi,
ich habe einen Inputstream von einem HTTP request und möchte nun die Header als String lesen und die eigentlichen Daten in ein byte Array ablegen.

Mein Ansatz sieht wie folgt aus (der Inputstream kommt von einem Socket):

Java:
		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.
Was mache ich falsch? Liegt es evtl. daran, dass ich zuerst über einen BufferedReader lese, und danach auf den normalen InputStream zugreife?


mfg
 

Michael...

Top Contributor
Liegt es evtl. daran, dass ich zuerst über einen BufferedReader lese, und danach auf den normalen InputStream zugreife?
Ja. Du liest in der ersten Schleife den kompletten Datenstrom bis zum Ende, dadurch
liefert ein anschliessendes stream.read() -1. Es gibt ja schliesslich nichts mehr zum Lesen.

Warum nicht einfach alles direkt vom InputStream auslesen?
 
T

Tarek1337

Gast
Hi,
der Stream kann eigentlich nicht zu ende sein, da ich in der Schleife nur die Header lese. Ein weiteres in.readLine() nach der ersten Schleife bringt mir dann auch den rest, den ich halt als byte Array brauche (ohne irgendwelche codierungen etc.).

Alles über den InputStream zu lesen ist eigentlich das, was ich zuletzt probieren werde. Hatte halt gehofft, dass es eine einfachere Möglichkeit gibt, als die Header byte-weise zu lesen und nach einem line feed abzufragen.

Z.b. würde der ObjectInputStream read(byte[]....) und readLine() anbieten. Somit könnte ich mit einem Stream beides lesen, allerdings ist readLine() hier deprecated...
 

HoaX

Top Contributor
Hi,
der Stream kann eigentlich nicht zu ende sein, da ich in der Schleife nur die Header lese. Ein weiteres in.readLine() nach der ersten Schleife bringt mir dann auch den rest, den ich halt als byte Array brauche (ohne irgendwelche codierungen etc.).

Doch, denn du nutzt ja einen _BUFFERED_Reader. Der liest "voraus", und speichert zwischen. Wenn du dann direkt auf den Stream zugreifst ist dieser - je nach Länge - leer, aber wenn du den Reader verwendest liest du dessen Puffer aus und erhälst weiterhin Daten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
S Socket String InputStream in hex umwandeln Netzwerkprogrammierung 1
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
windl InputStream cachen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
M Socket InputStream liest nicht vollständig Netzwerkprogrammierung 7
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
F JSch - inputstream is closed Netzwerkprogrammierung 13
M Socket InputStream sendet ausgaben von OutputStream zurück Netzwerkprogrammierung 2
D Inputstream to Outputstream Netzwerkprogrammierung 3
M InputStream and ObjectInputStream zur gleichen Zeit Netzwerkprogrammierung 11
MQue Inputstream Timeout Netzwerkprogrammierung 2
S Servlet InputStream leer?! Netzwerkprogrammierung 14
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
P Inputstream "verfügbar" Netzwerkprogrammierung 4
G JPG im InputStream Netzwerkprogrammierung 2
A InputStream liest immer komplettes PHP-Script Netzwerkprogrammierung 6
A InputStream ließt nur 65536 Zeichen anstatt ganzer Puffer Netzwerkprogrammierung 8
A inputstream teilen? Netzwerkprogrammierung 4
D InputStream (Socket) mit BufferedInputStream puffern Netzwerkprogrammierung 2
M Sockets und InputStream Netzwerkprogrammierung 8
R Client nimmt den Inputstream nicht an Netzwerkprogrammierung 5
S Mail anhang in InputStream packen Netzwerkprogrammierung 5
M InputStream - Bytes gehen verloren? Netzwerkprogrammierung 3
E Problem bei Sockets/InputStream über externe Klasse Netzwerkprogrammierung 5
André B. In einen InputStream schreiben? Netzwerkprogrammierung 6
G inputstream hat plötzlich weniger inhalt Netzwerkprogrammierung 8
Z ProgressBar auf BufferedOutput- & -InputStream Netzwerkprogrammierung 2
F GSON wenn das Json verschiedene Klassen enthält Netzwerkprogrammierung 1
S User im Chatprogramm verschiedene Farben Netzwerkprogrammierung 1
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
B Viele verschiedene E-Mails an unterschiedliche Empfänger schnell versenden? Netzwerkprogrammierung 8
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
B verschiedene Serialisierte Objekte identifizieren? Netzwerkprogrammierung 5
F Verschiedene Datentypen senden Netzwerkprogrammierung 4
W RMI Verschiedene Unterobjekte trotz selbem Remote Object Netzwerkprogrammierung 2
P Verschiedene Daten über einen Stream Netzwerkprogrammierung 4
Luma Verschiedene Frage zu nem Netzwerkprog Netzwerkprogrammierung 6
B Verbindung über verschiedene IPs Netzwerkprogrammierung 3
T JSON-Objekte richtig parsen Netzwerkprogrammierung 8
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
C List Deserialisierung entfernt Objekte Netzwerkprogrammierung 2
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
V Socket Objekte werden nicht aktualisiert Netzwerkprogrammierung 2
S Socket Über UDP Objekte verschicken Netzwerkprogrammierung 9
B Eigene Objekte per RMI übergeben Netzwerkprogrammierung 2
S Kapselung der Netz-Objekte Netzwerkprogrammierung 3
T Objekte im NIO unblocking mode versenden Netzwerkprogrammierung 11
C Socket ObjectInputStream liest nur Objekte der jeweiligen Programminstanz Netzwerkprogrammierung 5
G Frage zu Servlets und deren Objekte + Bilder in Servlets anzeigen? Netzwerkprogrammierung 11
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T Laufen Objekte, die vom Cajo-Server geliefert werden, lokal auf dem Client? Netzwerkprogrammierung 4
I Objekte über das Netzwerk Netzwerkprogrammierung 5
M Messenger - String oder Objekte Netzwerkprogrammierung 4
S Netzwerk und Objekte Netzwerkprogrammierung 5
S RMI 1.) Entfernte Objekte "Zwischenspeichern" 2.) Threadsicherheit Netzwerkprogrammierung 2
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
A Konflikt: Blocking und Non-Blocking bei Objekte versenden Netzwerkprogrammierung 4
N RMI und Datenbank Objekte Netzwerkprogrammierung 3
P Objekte über DatagramSocket versenden Netzwerkprogrammierung 12
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
M Objekte senden zwischen Java und PHP mit SOAP Netzwerkprogrammierung 9
A Objekte in übergebenen Objekten mit WebServices? Netzwerkprogrammierung 6
A RMI wie kann ich objekte übergeben? Netzwerkprogrammierung 5
P Serialialiserte Objekte übers Netzwerk verschicken Netzwerkprogrammierung 9
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben