Socket Streamumleitung

Status
Nicht offen für weitere Antworten.
P

pj

Gast
Hallo,
ich versuche den InputStream von einem Socket in den OutputStream eines anderen Sockets umzuleiten. Dabei sind beide Sockets in der blocking Variante, das heisst die read Methode blockiert solange, bis alles gelesen ist... Byteweise geht das, leider nur sehr langsam. Hat jemand eine effizientere Variante??

Mit freundlichen Grüssen und vielen Dank im Voraus für die Hilfe.
 

oversoul

Aktives Mitglied
Da wirste wohl ein byte-Puffer nutzen müssen (Blockweise)

kleines Beispiel

byte[] tmp = new byte[1024];
int readed = input.read(tmp);
output.write(tmp,0,readed);
 

HoaX

Top Contributor
"readed" ... read ist unregelmäßig: read, read, read. Da rollen sich ja einem die Zehnägel ...
 

oversoul

Aktives Mitglied
der name der Variable ist ja egal erstmal

für solche kleine Testdinge achte ich nicht auf solche kleinigkeiten
 
P

pj

Gast
Hmm.. Das Problem beim blockweise lesen ist, dass wenn jetzt angenommen nur 1023 der 1024 bytes kommen, dass die Methode solange blockiert, bis noch dieses eine byte vom server gesendet wurde..:S und damit würden die letzten 1023 byte gar nicht weitergeleitet werden..
 
T

tuxedo

Gast
Du gibst der read() Methode ein byte[] das 1024 byte fassen kann. Dann wird soviel gelesen wie da ist und ins array gesteckt. Der Rückgabewert von read() gibt an, wieviel gelesen wurde. Dann kannst du ein write() ausführen, das Array angeben und die Anzahl an bytes die von read() gelesen wurden. Im Klartext: Du schreibst nur soviel wie du zuvor gelesen hast. read() blockiert auch nur BIS es ETWAS gelesen hat. read() blockiert nicht bis das Array voll ist. Das wäre dann ein readFully() und wird nur von den wenigstem Streamarten angeboten.

- Alex
 

oversoul

Aktives Mitglied
Im int-Wert der von der Methode InputStream.read(byte[] puffer) zurück gegeben wird Inhält die Anzahl der gelesenen Daten
 
P

pj

Gast
Vielen Dank für die Antworten, ich glaube nun sollte es funktionieren..=D
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben