# InputStream klonen?



## flashray (11. März 2007)

Hallo,

wüste jemand wie ma einen InputStream klont?

Möchte den Inputstream zweimal verwenden. Was so ohne weiteres nicht möglich ist. Oder irgendwie zwischenspeichern um damit ein weiteres InputStream zu erzeugen.


Vg Erdal


----------



## Thomas Darimont (11. März 2007)

Hallo,

mach mal ein konkretes Beispiel...

Gruß Tom


----------



## flashray (11. März 2007)

Hallo Tom,

unzwar geht es um ein XML Beispiel Server/Client i. Der Client schickt eine XML Nachricht die ich per InputStream is = httpExchange.getRequestBody() entgegennehme.

Nun brauche ich die selbe Nachricht zweimal, einmal um festzustellen um welche Anfrage es sich handelt, zweitens um eine entsprechende Antwort zu bauen an einen weiteren Parser bzw. Scanner.

Das Klonen war nur so ein Vorschlag, möchte halt den Stream an verschiedenen Stellen des Programmes wiederverwenden. Dies ist aber direkt nicht möglich weil ein InputStream mark() und reset() nicht unterstüzt.


Vg Erdal


----------



## Thomas Darimont (11. März 2007)

Hallo,

warum schreibst du den RequestBody nicht einfach in ein byte[]? Beispielsweise über einen ByteArrayOutputStream ...

Gruß Tom


----------



## flashray (11. März 2007)

Hallo Tom,


```
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class StreamAdventure {

	public static void main(String[] args) throws IOException {
		InputStream is = new ByteArrayInputStream("Test".getBytes());
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int i = 0;
		while ((i = is.read()) != -1)
			baos.write(i);

		baos.close();

		InputStream is1 = new ByteArrayInputStream(baos.toByteArray());
		InputStream is2 = new ByteArrayInputStream(baos.toByteArray());
		InputStream is3 = new ByteArrayInputStream(baos.toByteArray());

		Scanner sc1 = new Scanner(is1);
		System.out.println(sc1.nextLine());
		Scanner sc2 = new Scanner(is2);
		System.out.println(sc2.nextLine());
		Scanner sc3 = new Scanner(is3);
		System.out.println(sc3.nextLine());
	}
}
```

Ja, hab mit Hilfe des ByteArrayOutputStreams das zwischenspeichern realisieren können, danke!

Eine Frage noch, kann man das direkt ohne Verwendung dieser (while) Schleife in einem Schritt umsetzen?


Vg Erdal


----------

