2017-07-07 3 views
0

Ich verwende einen objectoutputstream um Daten für bekannte Geräte zu senden und zu empfangen, aber es könnte in meinem Fall möglich sein, dass auch andere Anfragen mit "String" -Streams auf den InputStream des Sockets kommen.Datentyp der eingehenden Anfrage erkennen

Was ist der beste Weg zu erkennen, ob der eingehende Stream von einem ObjectInputStream behandelt werden kann oder ob er über einen normalen bufferedreader/inputreader rot sein muss.

Vielen Dank für Ihre Eingabe!

+1

Die eingehende Nachricht wird nicht erraten. Sie sollten mit einem sehr guten Protokoll kommen und auf diese Weise aufhören, den ankommenden möglichen Typ zu erraten. –

+0

Nun, es ist tatsächlich ein gut definiertes Protokoll. Es ist nur möglich, dass auf dem gleichen IP/Port zwei verschiedene Arten von Anfragen vom Server behandelt werden müssen, was entweder ein String Stream oder ein Objekt Stream sein könnte. – edi

+2

Nun, es ist nicht gut definiert. Eine Lösung, um es gut definiert zu machen, besteht darin, ein Flag zu senden, bevor Sie die eigentlichen Daten senden (z. B. ein Byte, das 0 bedeutet, dass es ein Objekt ist, und 1, da es 0 ist), und dann die nächsten Daten lesen. Ich schlage auch vor, dass Sie zu viel Java-Sache loswerden und mit etwas üblicherem wie JSON/XML über Java-Objekt-Marshalling gehen, es wird Ihnen zu viel helfen, mehrere Clients mit verschiedenen Plattformen zu haben, wenn Java nicht verfügbar ist. –

Antwort

0

Sie können eine Zeichenfolge als ein Objekt durch einen objectoutputsteam senden und auf der anderen Seite instanceof überprüfen, ob es eine Zeichenfolge ist. Wenn nicht, können Sie mit instanceof überprüfen, welche Klasse das Objekt gesendet wurde . Sobald Sie die richtige Klasse gefunden haben, müssen Sie das Objekt in diese Klasse umwandeln.

Verwandte Themen