# Streams Bündeln



## millinär (10. Jul 2006)

kann man Stream irgendwie Bündel so das man zb statt:

```
OutputStream os[]=new OutputStream[5];
String xxx;
for(int i=0;i<os.length;i++){
os[i].write(xxx);
}

//alle outputstreams in einen bündeln kann zb:


OutputStream alle=new OutputStream(os);
alle.write(xxx);
```

ich habs deshalb in netzwerk forum gemacht weil ichs es für einen Server brauche


vieleicht kann ich mir die sache aber auch sparen kennst vieleicht jemand ein unkompliziertes server client api


----------



## Einwegdose (10. Jul 2006)

Ich würde mal Nein sagen ;-)


----------



## foobar (11. Jul 2006)

Was willst du denn machen?


----------



## millinär (11. Jul 2006)

eine unkomplizerte Client Server api die auch für anfänger leicht verständlich ist .
ich hab nur ein proplem nähmlich :


```
OutputStream os[]=new OutputStream[200];
String xxx;
for(int i=0;i<os.length;i++){
os[i].write(xxx);
//fals man den 200sten outputstream hat bekommt man immer an 200ster stelle den String also immer als letzter
//ich weiß zwar nicht ob das viel ausmacht aber etwas unproffesionell find ich das schon 
}
```


----------



## Lim_Dul (11. Jul 2006)

Irgendwer muss sowieso der letzte sein, da man über das Netzwerk nur sequentiell senden kann. Ich finde an der Lösung nichts unschönes.


----------



## millinär (11. Jul 2006)

das heist bei fast allen online games IRC usw. zieht immer einer die arschkarte?
hmm man könnte immer abwechselnd durchlaufen lassen einmal von oben einmal von unten
aber geht es nicht irgendwie das man die streams bündelt ?


----------



## Lim_Dul (11. Jul 2006)

Das macht keinen Sinn.

Auf der untersten Ebene *muss* das als 200 getrennte Streams gehandhabt werden, da es sich dabei auch um 200 verschiedene Verbindungen handelt. Selbst wenn du das irgendwie bündelst, muss es dann beim senden wieder entbündelt werden, sorgt also nur für mehr Arbeit. Und ins Gewicht fällt das normalerweise nicht, wer die Daten als letztes bekommt.


----------



## foobar (11. Jul 2006)

Solange die zu sendenden Pakete klein sind, wird das auch nicht auffallen, da alles sehr schnell geht. Du kannst ja mal mit System.getCurrenttiME() DIE zEIT STOPPEN.


----------



## Einwegdose (11. Jul 2006)

Das gibts nicht 
Du meinst wohl _System.nanoTime()_


----------



## foobar (11. Jul 2006)

Ich meinte das hier: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis()

nanoTime kann man natürlich auch ab Java 1.5 verwenden.


----------



## Leroy42 (11. Jul 2006)

@millinär
Schreib' dir doch eine einfache, von FilterOutputStream abgeleitete
Klasse, die deine ganzen Streams bündelt.

Die Klasse benötigt nur ein OutputStream-Array(ArrayList), eine
addStream-Methode und *eine* überschriebene write-Methode, die
deine Ausgaben an alle gebündelten Streams weiterleitet.

Welches diese eine write-Methode ist, habe ich nicht mehr im Kopf,
da ich das vor längerer Zeit gemacht habe, aber da hilft dir die API-Doc.

Das ist die eleganteste und einfachste Lösung.  :wink:


----------

