2012-02-28 19 views
5

Jaki jest najlepszy sposób wysłania wartości wyliczeniowej przez gniazda? Czy istnieje sposób przekonwertowania wartości wyliczeniowej na int i na odwrót? odczuwalna:Java ~ Wysyła wyliczenie przez połączenie z gniazdem

Enum values { 
    value1, 
    value2 
} 

int value = (int)value1; 
And... 
values value2 = (value) value; 

Byłoby bardzo miło, aby wysłać to przez internet! Dzięki wszystkim!

Bas

+0

Duplikat http://stackoverflow.com/questions/1681976/enum-with-int-value-in-java –

+0

Nie, nie chcę aby dodać atrybuty do wartości, po prostu chcę wysłać wartość wyliczenia, która jest smamem na serwerze i kliencie przez gniazda. dzięki za twój komentarz;) – Basaa

+0

Wypróbuj [this] (http://mindprod.com/jgloss/enum.html#ORDINAL). –

Odpowiedz

6

Tak czy Marshall do int:

int ordinal = values.value1.ordinal() 

//unmarshalling 
values.values[ordinal]; 

lub String:

String name = values.value1.name(); 

//unmarshalling 
values.valueOf(name); 

Były zapamiętuje pewne obszary (32 bity, w przeciwieństwie do ciągów różnej długości), ale jest trudniejsze do utrzymania, np Zmiana wartości enum przełamie kompatybilność wsteczną ordinal(). Z drugiej strony ordinal() umożliwia zmianę nazwy enum wartości ...

+0

To (i Banthars andswer) działało dobrze. Teraz inne pytanie: Jaka jest funkcja Java, aby uzyskać ten sam wynik co C#: this.cmd = (Command) BitConverter.ToInt32 (dane, 0); – Basaa

+0

@Basaa: technicznie powinno to być drugie pytanie (jest bardziej prawdopodobne, że otrzymasz odpowiedź), ale spójrz na to: stackoverflow.com/questions/1026761 –

+0

Używałbym tej nazwy, jeśli potrafisz. na przykład z 'dataOutput.writeUTF (value.name())' i 'Enum e = Values.forName (dataInput.readUTF())' ponieważ jest to również bardziej czytelne. –

Powiązane problemy