Teile vom InputStream schreiben

Status
Nicht offen für weitere Antworten.

fishEye

Mitglied
Hallo!

Ich habe ein (bestimmt kleines) Problem welches ich schon eine ganze Weile nicht lösen kann und hoffe dass mir hier geholfen wird. Und zwar schreibe ich eine kleine Anwendung, welche eine Nachricht binär über ein InputStream bekommt. Danach möchte ich Teile diesen InputStreams genauso (binär) in eine Datei speichern. Sprich ich möchte rausfinden an welcher Stelle im InputStream eine bestimmte Zeile vorkommt ("z.b. die mit "\n\n" aufhört) und den Inhalt erst ab dieser Stelle bis zum Ende in die Datei schreiben. Wie könnte man sowas realisieren? Wenn ich den InputStream an den BufferedReader weitergebe, kann ich den Inhalt zeilenweise überprüfen aber dann wird es doch zu einem String konvertiert. Vielleicht könnte ich die Stelle im InputStream irgendwie markieren...

Ich bin dankbar für alle Tipps!
 
Woher willst du wissen das eine bestimmte Bitfolge für \n\n steht wenn du nicht implizit davon ausgehst, das es Text Content ist und das ein bestimmtes Encoding vorliegt?
 
Ja das ist auch das Problem oder eines der Probleme. Genauer gesagt geht es mir darum den Header einer HTTP-Response abzutrennen und den Rest binär zu speichern. (Ohne Benutzung der URL-Klasse)
 
Der Header wird vom Content durch eine Leerzeile getrennt.
Verpack den Stream doch in einen BufferedReader, lies zeilenweise, bis du eine Leerzeile findest und dann geht es (je nach Content-Type) mit dem InputStream weiter.
 
Ja die Theorie ist soweit klar, aber wie kann ich es in der Praxis weitergeben? Gibt es da sowas wie eine Markierung oder Zeilen-Counter?

Sorry blicke da vielleicht nicht ganz durch, bin noch ein Anfänger 😳
 
brauchst du doch nicht. Wenn du den InputStream in einem BufferedReader kapselst, ist der INputStream dadurch doch nicht verschwunden. Sobald die Leerzeile kommt, benutzt du den BufferedReader einfach nicht mehr und liest auf dem original InputStream weiter. Der steht dann an der Stelle, an der der BufferedReader aufgehört hat.
 
Sicher dass das so leicht geht? Es ist ein _Buffered_Reader. Ich denke in den meisten Fällen wird dieser schon weiter gelesen haben als nur bis zum nächsten Zeilenumbruch (Byte für Byte lesen wäre ja inperformant und würde dann ja ehr gegen den BufferedReader sprechen). Ergo geht es beim InputStream nicht an der erwarteten Stelle weiter.
 
Auf dem BufferedReader rufst du readln auf, dann liest er bis zum naechsten Zeilenumbruch, aber nicht weiter.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben