# verschiedene Serialisierte Objekte identifizieren?



## Behnke (16. Apr 2011)

Hallo Zusammen,

hab schon viel gegoogelt und ich bin Anfänger in Netzwerkprogrammierung.
Unsere Aufgabe ist aktuell ein Netzwerkspiel zu schreiben und ich beschäftige mich mit der Kommunikation. Es funktioniert, ich kann ein Objekt über ObjectInput/OutputStream verschicken und empfangen.

Meine Frage die sich mir stellt, wozu ich keine Antwort gefunden hab:
*Wie finde ich auf Client/Server-Seite raus um welches Objekt es sich handelt?*

Bis jetzt hab ich einfach Zwangskonvertiert, da es ja nur ein Objekt war.


```
Auto = (Auto)clientInputStream.readObject();
```

aber ich habe ja vor, darüber viele verschiedene Objekte zu verschicken. Wie find ich auf der anderen Seite wieder raus von welchem Typ die waren?

Ich meine mit *instanceof() oder clientInputStream.readObject().equals(obj) für jedes Objekt eine If-Abfrage oder was ist da die elegante Lösung?*

Habt ihr meine Frage verstanden? Ich hoffe doch!
Vielen Dank!


----------



## tuttle64 (16. Apr 2011)

Jedes Objekt in Java bietet die Methode getClass() an, welche den Namen seiner Klasse zurückgibt. Damit sollte es ermittelbar sein, um welche Klasse es sich handelt. Wenn Du nur den Namen der Klasse benötigst, kannst Du auch getClass().getSimpleName() benutzen.


----------



## FArt (17. Apr 2011)

Im Prinzip ist das aber völlig unnötig. Beim Standardmechanismus wird ein Objekt (und seine Attribute usw.) in einer festen Reihenfolge serialisiert, und auf dem Empfängerseite deserialisiert. 
Wenn du selber eingreifst, realisierst du eine Art Kommunikationsprotokoll. Wenn du das für dich definierst, musst du auch nicht raten, was für ein Objekt gerade ankommt, sondern es muss ja dem Protokoll folgen.
Für eine Art von RPC würde ich kein eigenes Protokoll entwerfen sondern ein bestehendes hernehmen. Da werden in der Regel die Metainformationen (auf wen wird welche Methode mit welchen Parametern aufgerufen) extra mitgeschickt.


----------



## Behnke (17. Apr 2011)

> in einer festen Reihenfolge serialisiert, und auf dem Empfängerseite deserialisiert.



Kann ich mir im Moment absolut nicht vorstellen wie du das meinst. Habt ihr vielleicht ein Link für mich der mir weiterhelfen könnte? Mich interessiert wie so ein Protokoll aussieht.

@tuttle64: getClass() hört sich nach einer Möglichkeit an, aber sieht auch so unpraktisch aus. Das wird ja voll viel Code nur um zu prüfen was da an kommt. Kann Java sowas nicht "automatisch"?

Gruß Behnke


----------



## Vogi (17. Apr 2011)

ich würde instanceof benutzen und das Objekt dann halt casten.


----------



## FArt (17. Apr 2011)

Behnke hat gesagt.:


> Kann ich mir im Moment absolut nicht vorstellen wie du das meinst. Habt ihr vielleicht ein Link für mich der mir weiterhelfen könnte? Mich interessiert wie so ein Protokoll aussieht.
> 
> @tuttle64: getClass() hört sich nach einer Möglichkeit an, aber sieht auch so unpraktisch aus. Das wird ja voll viel Code nur um zu prüfen was da an kommt. Kann Java sowas nicht "automatisch"?
> 
> Gruß Behnke



java serialisation - Google-Suche

Wunder dich nicht darüber, was Java nicht automatisch kann oder doch... dein Ansatz ist daneben. Das kommt vermutlich daher, dass du mit Halbwissen versucht hast ein Problem zu lösen. Du bist auf ein Ergebnis gekommen, welches aber wiederum Probleme aufwirft, mit denen du dann hier gelandet bist.

Beschreibe was du eigenlich machen möchtest, dann muss man dir nicht bei der seltsamen Umsetzung deines Kommunikationsprotokolls helfen, denn so wird das nichts sinnvolles.


----------

