Inputstream in Outputstream umleiten

  • Themenstarter Themenstarter as1
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
A

as1

Gast
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...

Code:
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.
 
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.
 
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.
 
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...
 
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.
 
PS.: dieser Code liefert mit die ausgabe und die bricht auch nicht ab

Code:
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) {	}		
    	}
    }
}
 
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.
 
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 😵
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben