2012-02-28 7 views
5

¿Cuál es la mejor manera de enviar un valor enum a través de sockets? ¿Hay alguna manera de convertir un valor enum a un int y viceversa? Al igual que :Java ~ Enviar una enumeración a través de una conexión de socket

Enum values { 
    value1, 
    value2 
} 

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

sería muy agradable para enviar esta en internet! ¡Gracias a todos!

Bas

+0

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

+0

No, no quiero para agregar atributos a los valores, solo deseo enviar un valor de Enum que sea el smame en el servidor y el cliente a través de sockets. gracias por su comentario;) – Basaa

+0

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

Respuesta

6

Cualquiera de Marshall a int:

int ordinal = values.value1.ordinal() 

//unmarshalling 
values.values[ordinal]; 

o para String:

String name = values.value1.name(); 

//unmarshalling 
values.valueOf(name); 

El anterior ahorra algo de espacios (32 bits en lugar de cadenas de longitud variable) pero es más difícil de mantener, por ejemplo la reorganización de los valores enum romperá ordinal() compatibilidad con versiones anteriores. Por otro lado ordinal() permite cambiar el nombre enum valores ...

+0

Eso (Y Banthars andswer) funcionó bien. Ahora otra pregunta: ¿Cuál es la función de Java para obtener el mismo resultado que C# 's: this.cmd = (Command) BitConverter.ToInt32 (data, 0); – Basaa

+0

@Basaa: técnicamente esta debería ser una segunda pregunta (es más probable que recibas una respuesta), pero echa un vistazo a esto: stackoverflow.com/questions/1026761 –

+0

Usaría el nombre si puedes. p.ej. con 'dataOutput.writeUTF (value.name())' y 'Enum e = Values.forName (dataInput.readUTF())', ya que también es más legible. –

Cuestiones relacionadas