# Inputstream in Outputstream umleiten



## as1 (18. Mrz 2007)

Moin,

ich mal wieder mit einer Frage, ich habe einen Inputstream und möchte den in einen Outputstream umleiten.
Dazu habe ich mir einen Thread geschrieben der  einen Inputstream und einen Outputstream übergeben bekommt...


```
import java.io.*;

public class PushOutputThread extends Thread {
   
	OutputStreamWriter myopsw;
	InputStreamReader myipsr;
  
    public PushOutputThread(InputStream ips, OutputStream ops) {
        this.myopsw = new OutputStreamWriter(ops);
        this.myipsr = new InputStreamReader(ips);
    }
  
    public void run() {
    	while(true)
    	{
    		try {
    		myopsw.write(myipsr.read());
    		} catch (Exception e) {	}		
    	}
    }
}
```

Allerdings klappt das einfach net. Da ich die sowohl den Inputstream als auch den Outputstream von einer anderen methode bekomme wollte ich mal fragen ob mein Thread nicht das macht was er soll oder ob das Problem "außerhalb" liegt.


----------



## Marco13 (18. Mrz 2007)

_Allerdings klappt das einfach net._
Diese Fehlerbeschreibung ist eigentlich keines Kommentars mehr wert. Nur so viel:  :autsch: 

Zumindest solltest du überprüfen, was gelesen und was geschrieben wird. Wenn man vom InputStream nichtsmehr lesen kann, wird -1 zurückgeliefert. Und spätestens DANN solltest du die Schleife abbrechen.


----------



## Guest (18. Mrz 2007)

Sry, was die Fehlerbeschreibung angeht aber ich krieg ja keine Fehlerausgabe auf der Console von daher weiß ich auch net so recht was ich hier schreiben soll...

Hab jetzt mal getestet ob der Stream gelesen werden kann und das funktioniert soweit.


----------



## Marco13 (18. Mrz 2007)

Ein kleines, selbstständiges, compilierbares Beispiel hilft in so einem Fall häufig. Der Hinweis mit dem "nicht lesen können" bezog sich darauf, dass der Thread in einer Endlosscheife steckt, und dort nie rauskommt. Er liest die Daten vom InputStream. Und irgendwann ist er am Ende des InputStreams angekommen. inputStream.read() liefert dann fleißig bei jedem Aufruf "-1". Und diese "-1"er werden genauso fleißig in den outputStream geschrieben. Aber einen Grund, die Endlosschleife abzubrechen, lieferst du ihm nicht...


----------



## as1 (18. Mrz 2007)

Aso, denn hab ich das falsch verstanden.

Der Thread läuft deswegen in einer endlosschleife, weil er einen kontinuerlichen stream aus dem internet bekommt und diesesn auch auch wieder ins internet senden soll.
Dh. der thread soll solange laufen bis ich ihn von außen kill.

das lesen den stream klappt auch, hab mir den mal in der console ausgeben lassen und das funzt.


----------



## as1 (18. Mrz 2007)

PS.: dieser Code liefert mit die ausgabe und die bricht auch nicht ab


```
import java.io.*;

public class PushOutputThread extends Thread {
   
	OutputStreamWriter myopsw;
	InputStreamReader myipsr;
	InputStream is;
	OutputStream os;
	boolean run=true;
	int n=0;
  
    public PushOutputThread(InputStream ips, OutputStream ops) {
        this.myopsw = new OutputStreamWriter(ops);
        this.myipsr = new InputStreamReader(ips);
        this.is = ips;
        this.os = ops;
    }
  
    public void run() {
    	System.out.println("redirect: "+is+" to "+os);
    	while(run)
    	{
    		try {
    		if(n<50) {
    			System.out.print(myipsr.read());
    			n++;}
    		else {
    			System.out.println(myipsr.read());
    			n=0;}
    		//myopsw.write(myipsr.read());
    		if(myipsr.read()==-1) run=false;
    		
    		} catch (Exception e) {	}		
    	}
    }
}
```


----------



## Marco13 (18. Mrz 2007)

Wie sich das "nicht klappen" denn nun äußert, hast du aber immernoch nicht gesagt. Eventuell kannst du mal zwischendurch ein
outputStream.flush()
aufrufen. Ansonsten ...  ???:L ... naja. Vielleicht kann ja jemand anderes weiterhelfen. Sorry.


----------



## Guest (18. Mrz 2007)

soo, hab mal wieder was getestet.

Vom inputstream kann ich unbegrenzt lesen.
In den outputstream kann ich allerdings nur 8192 mal schreiben, danach schreibt er nicht mehr... woran kann das leigen?


@Marco13  outputStream.flush() gibt bei mir nichts aus


----------

