# Probleme mit ObjectOutputStream!



## JayJay (4. Jan 2006)

Hi,

ich lass bei mir zwei programme miteinander kommunizieren.

Ich verwende dabei das ObjectInputStream bzw. ObjectOutputStream  objekt.

dabei handelt es sich um folgende Klasse:


```
class message implements Serializable
{
  public Object obj;
  public int type;
}
```

Das objekt kann immer unterschiedlich sein.  Das ganze funktioniert auch wunderbar. Nur dauert der datenaustausch sehr sehr lange teilweise bis zu 250ms. 
Die daten sind teilweise nur ein paar stings. 

Woran könnte das denn liegen, jemand eine idee??


Ciao


----------



## L-ectron-X (4. Jan 2006)

Wie kommunizieren denn die Programme miteinander?
Sind es Klassen in einem Java-Programm, die miteinander kommunizieren, oder zwei Java-Applikationen?
Wozu benötigst du serialisierte Objekte?


----------



## JayJay (4. Jan 2006)

Naja über das serialisieren könnten doch die objekte über ObjectInput/OutputStream verschickt werden??

Es sind zwei vollständig getrennte Java-Programm die miteinander kommunizieren!


----------



## JayJay (4. Jan 2006)

ICh hab das ganze mal profilt:


Point1: 0
Point2: 0
Point3: 0
Point3a: 0
Point4: 10
Point5: 341

Point 3 auf 4 schreibt eine Nachricht:

von Point 4 auf 5 wird liest programm A(Client) von B(Server) ein leeres packet.
(hab ich extra so gemacht)

D.h. egal welche  nachricht geschickt wird das ganze dauert ca. 200-300 ms.

Es wird auf dem server ein thread für den client geöffnet, kann das evt. damit kollidieren?


----------



## JaJay (4. Jan 2006)

hmm.. wie es aussieht braucht folgender code die Zeit:


```
message req= (message)input.readObject();
// ab hier
message res = new message();
					
output.writeObject( res);
// bis hier
```


----------



## JayJay (4. Jan 2006)

*ACHTUNG: Ich muss meinen letzten Post korrigieren !!*

Es sind immer die input.readObject(); funktioinen welche bis zu 200ms brauchen. 

die out.out.writeObject( message ); funktion nimmt nicht mehr als 20ms in anspruch.

So nur warum das ganze??


----------



## L-ectron-X (5. Jan 2006)

Ich weiß nicht..., ich fände es besser, die Programme über Sockets miteinander kommunizieren zu lassen.


----------



## JayJay (5. Jan 2006)

Wird doch gemacht?

Es wird eine Socket Verbindung aufgebaut, die dann ein ObjectOutputStream zum Schreiben verwemdet!


----------



## JayJay (5. Jan 2006)

Hab das Ganze jetzt auf einem Rechner ausprobiert, d.h. beide Applikationen laufen auf der gleichen Seite (davor auf zwei rechnern).

Wie es aussieht gibt es hier bessere Ergebnisse! Das wsa 200 ms gedauert hat dauert jetzt 0 - 10.


Am Netzwerk kann das wahrscheinlich nicht liegen...100Mbit?!!


----------



## Bleiglanz (5. Jan 2006)

> Es sind immer die input.readObject();
> funktioinen welche bis zu 200ms brauchen.


könnte dran liegen, dass beim geblockt wird und die methode erst zurückkehren kann, wenn alle Bytes gelesen sind

wenn der server nix schickt, dann bleibt das Programm an der Stelle ganz stehen


----------



## Mag1c (5. Jan 2006)

Hi,

hast du nach dem writeObject(...) mal ein flush() gesetzt ?

Gruß
Mag1c


----------



## JayJay (6. Jan 2006)

jep hab ich mal ausprobiert hab aber nur eine verbesserung von 50ms bekommen.


----------



## Guest (6. Jan 2006)

Mach ein java.io.Externalizable daraus, dann wird es etwas schneller.


----------



## Mag1c (6. Jan 2006)

Hi,

wie sind denn die Ping-Zeiten zwischen den Rechnern ?

Gruß
Mag1c


----------



## JayJay (6. Jan 2006)

Die Pingzeit sind einwandfrei. < 1 ms.
Hab das ganze auch mit einem anderen Rechner ausprobiert. das problem beibt bestehen.


----------



## JayJay (6. Jan 2006)

Die Pingzeit sind einwandfrei. < 1 ms.
Hab das ganze auch mit einem anderen Rechner ausprobiert. das problem beibt bestehen.


java.io.Externalizable wird auch nicht wirklich helfen.


----------

